您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: