leetcode第35题--Valid Sudoku
题目:Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'.
![]()
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
意思是来一个九宫格,里面存有数字或者‘.’,判断已有的数字是否符合九宫格的规则。也就是每行每列和每个小九宫格不能有重复元素。这些元素都是1-9.小时候玩过这些游戏,要是给定元素解九宫格就比较负责了。这题只是要我们判断是否符合。
思路是这样的,就是判断来一个数的时候,它所在的行和列还有子九宫是否有和它重复的,如果有就判断输出非法,否则一直进行到最后。都没有非法元素,那就输出true。
开辟三个9*9的bool,分别代表行row,列col,和子九宫subSudo,来一个数,例如5那么就在相应的row的5-1里面记录true,在col的5-1个里面记录true,在相应子九宫里面记录true。当然在记录true之前要判断是否为false,如果已经是true了就说明之前已经填入过了,那就重复了,输出非法。
关于子九宫的表示,我看了个说用i - i % 3 + j / 3,好复杂,其实自己推一下,用3*(i/3) + (j/3)就很好理解,话一个3*3的,相应的0到8,然后和i/3,j/3的关系一目了然。
如果是用java,那么三个9*9的bool是默认初始为false的,可以不用再初始化,如果用的是c++,那么注意了,需要对三个boo数组进行初始化,可以用两个for到9来初始化,也可以使用memset。
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board)
{
bool row[9][9], col[9][9], subSudo[9][9];
memset(row, false, sizeof(row));
memset(col, false, sizeof(col));
memset(subSudo, false, sizeof(subSudo));
for (int i = 0; i < 9; ++i)
for (int j = 0; j < 9; ++j)
{
if (board[i][j] == '.')
continue;
int c = board[i][j] - '1'; // 注意了是 减一 因为下标是从0开始的
if (row[i][c] || col[j][c] || subSudo[3*(i/3) + (j/3)][c])
return false;
row[i][c] = col[j][c] = subSudo[3*(i/3) + (j/3)][c] = true;
}
return true;
}
};
leetcode第35题--Valid Sudoku的更多相关文章
- LeetCode(36)Valid Sudoku
题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...
- leetcode第20题--Valid Parentheses
Problem: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if ...
- 【leetcode❤python】 36. Valid Sudoku
#-*- coding: UTF-8 -*-#特定的九个格内1-9的个数至多为1#依次检查每行,每列,每个子九宫格是否出现重复元素,如果出现返回false,否则返回true.class Solutio ...
- leetcode个人题解——#36 valid Sudoku
思路题目里已经给出来了,判断是否是一个有效数独,只需满足以下三个条件: 1.同行元素不重复且1-9都有: 2.同列元素不重复且1-9都有: 3.每个粗线分隔的3*3的小九宫格元素不重复且1-9都有. ...
- LeetCode第35题:搜索插入位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6 ...
- 【leetcode刷题笔记】Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- LeetCode——Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- 乘风破浪:LeetCode真题_036_Valid Sudoku
乘风破浪:LeetCode真题_036_Valid Sudoku 一.前言 有的时候对于一些基础知识的掌握,对我们是至关重要的,比如ASCII重要字符的表示,比如一些基本类型的长度. 二.Valid ...
- Leetcode 笔记 35 - Valid Soduko
题目链接:Valid Sudoku | LeetCode OJ Determine if a Sudoku is valid, according to: Sudoku Puzzles - The R ...
随机推荐
- 恢复Ubuntu引导菜单
介绍 当使用双系统,我们经常重Windows! 有没有一种方法:刚刚重装Windows而不重装Ubuntu呢? 在使用Win XP/Ubuntu双系统时.这个问题非常好解决!可是在使用Win7(包括V ...
- JUnit使用参数测试和一组测试
JUnit该参数测试和一组测试使用简单 参数测试 作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试 ...
- dojo/dom源码
dojo/dom源码学习 dojo/dom模块作为一个基础模块,最常用的就是byId方法.除此之外还有isDescendant和setSelectable方法. dom.byId(myId)方法: ...
- 83. 从视图索引说Notes数据库(上)
索引是数据库系统重要的feature,不管是传统的关系型数据库还是时兴的NoSQL数据库,它攸关查询性能,因而在设计数据库时须要细加考量.然而,Lotus Notes隐藏技术底层.以用户界面为导向.追 ...
- unity节目素材ProceduralMaterial采用
有些效果substance物质的.然而,对房地产的材料可以不寻常Material方法调用,必须ProceduralMaterial打电话. using UnityEngine; using Syste ...
- XML DTD详解(转)
前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...
- asp.net学习之再论sqlDataSource
原文:asp.net学习之再论sqlDataSource 本节从上一节没有阐述的几个方面,再讨论一下SqlDataSource的用法及注意的事项. 上一节的链接地址如下:http://www. ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- sql小总结2
SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...