题目:
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
数独部分空格内已填入了数字,空白格用 '.' 表示。
示例:
输入:
[
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
输出: true
代码:
public class Test12 {
@Test
public void test(){
char[][] test = new char[][]{{'5','3','.','.','7','.','.','.','.'},
{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},
{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},
{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},
{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};
boolean validSudoku = new Test12().isValidSudoku(test);
System.out.println(validSudoku);
}
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
char stand = board[i][j];
if (stand=='.') {
continue;
}
for (int k = 0; k < board[i].length; k++) {
if (k==j) {
continue;
}
if ((board[i][k])==stand) {
return false;
}
}
for (int k = 0; k < board.length; k++) {
if (k==i) {
continue;
}
if ((board[k][j])==stand) {
return false;
}
}
int lineIndex = i-i%3;
int columnIndex = j-j%3;
for (int k = lineIndex; k < lineIndex+3; k++) {
for (int l = columnIndex; l < columnIndex+3 ; l++) {
if (k==i&&l==j) {
continue;
}
if ((board[k][l])==stand) {
return false;
}
}
}
}
}
return true;
}
}