leetcode 判断数独是否合法

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;
}

你可能感兴趣的:(算法)