leetcode 判断数独是否合法
2016-12-01 12:17
267 查看
leetcode 判断数独是否合法?(不知道为什么是easy难度,其实我觉得挺难得)
首先,数独示意图(http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Sudoku-by-L2G-20050714.svg/250px-Sudoku-by-L2G-20050714.svg.png)如图数是一个9*9共81个小方格的大方格,并且每个小方格的数字在1-9之间或者为空。数独合法的定义是:
1.在同一行不能出现相同的数字
2.在同一列不能出现相同的数字
3.在所有的小3*3的方格中不能出现相同的数字,注意,这里的3*3小方格只有9个,即将9*9大方格切成9块
然后开始逐步解决这三个要求:
1.同一行不能出现相同的数字
采用一个9*9的boolean数组初始化为false,即row[i][j],i表示大方格的行号,j表示第i行出现的数字。若遍历数独的时候row[i][j]为true,说明第i行出现过j这个数字了,为非法数独。
2.列采用和行一样的方法处理
3.在所有的3*3小方格中不能出现相同的数字
同样采用一个9*9数组cube[i][j]来标识所有的这样的小方格中出现过的数字。i表示第几个立方体 i=(row/3)*3+cloumn/3),j为出现过的数字
代码如下:
public boolean isValidSudoku(char[][] board) {
boolean[][] row=new boolean[9][9];
boolean[][] column=new boolean[9][9];
boolean[][] cube=new boolean[9][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]==’.’)continue;
int loc=board[i][j]-‘1’;
if(row[i][loc]||column[j][loc]||cube[(i/3)*3+j/3][loc])return false;
row[i][loc]=true;
column[j][loc]=true;
cube[(i/3)*3+j/3][loc]=true;
}
}
return true;
}
首先,数独示意图(http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Sudoku-by-L2G-20050714.svg/250px-Sudoku-by-L2G-20050714.svg.png)如图数是一个9*9共81个小方格的大方格,并且每个小方格的数字在1-9之间或者为空。数独合法的定义是:
1.在同一行不能出现相同的数字
2.在同一列不能出现相同的数字
3.在所有的小3*3的方格中不能出现相同的数字,注意,这里的3*3小方格只有9个,即将9*9大方格切成9块
然后开始逐步解决这三个要求:
1.同一行不能出现相同的数字
采用一个9*9的boolean数组初始化为false,即row[i][j],i表示大方格的行号,j表示第i行出现的数字。若遍历数独的时候row[i][j]为true,说明第i行出现过j这个数字了,为非法数独。
2.列采用和行一样的方法处理
3.在所有的3*3小方格中不能出现相同的数字
同样采用一个9*9数组cube[i][j]来标识所有的这样的小方格中出现过的数字。i表示第几个立方体 i=(row/3)*3+cloumn/3),j为出现过的数字
代码如下:
public boolean isValidSudoku(char[][] board) {
boolean[][] row=new boolean[9][9];
boolean[][] column=new boolean[9][9];
boolean[][] cube=new boolean[9][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]==’.’)continue;
int loc=board[i][j]-‘1’;
if(row[i][loc]||column[j][loc]||cube[(i/3)*3+j/3][loc])return false;
row[i][loc]=true;
column[j][loc]=true;
cube[(i/3)*3+j/3][loc]=true;
}
}
return true;
}
相关文章推荐
- Python如何判断数独是否合法
- 解数独程序源代码,可检测题目是否合法,可解无解/一个解/多个解的情况。leetcode测试较快,现在分享,望指教!
- 【LeetCode91-100】编码种数,逆转单链表,IP地址转化,中序遍历二叉树,生成二叉搜索树,计算二叉树个数,交叉string【hard】,判断二叉搜索树是否合法,恢复二叉树(有两个元素被交换)
- python_lintcode_96. 链表划分_389. 判断数独是否合法
- 389 - 判断数独是否合法
- 判断数独是否合法-LintCode
- 容易 判断数独是否合法
- LeetCode Valid Number(判断字符串是否是合法的数字表示 )
- leetcode_36. Valid Sudoku 判断数独规则是否成立,检查每行、每列、每个九宫格
- LintCode398:判断数独是否合法
- leetcode之二叉树类之二叉树中序遍历运用-----OJ173/230/98/99/285 二叉树迭代器/BST第K小元素/判断BST是否合法/恢复BST/二叉树下个节点
- LintCode Valid Sudoku 判断数独是否合法
- LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树
- 36.判断数独是否合法
- 题目:判断数独是否合法
- 判断数独是否合法
- lintcode-389-判断数独是否合法
- LintCode389.判断数独是否合法
- lintcode 容易题:Valid Sudoku 判断数独是否合法
- LintCode-判断数独是否合法