题目
题解
代码
public class code36 {
public static boolean isValidSudoku(char[][] board) {
// 记录某行,某位数字是否已经被摆放
boolean row[][] = new boolean[9][10];
// 记录某列,某位数字是否已经被摆放
boolean col[][] = new boolean[9][10];
// 记录某 3x3 宫格内,某位数字是否已经被摆放
boolean block[][] = new boolean[9][10];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
int num = board[i][j] - '0';
int block_index = i / 3 * 3 + j / 3;
if (row[i][num] || col[j][num] || block[block_index][num]) {
return false;
} else {
row[i][num] = true;
col[j][num] = true;
block[block_index][num] = true;
}
}
}
}
return true;
}
public static void main(String[] args) {
char a[][] = { { '.', '8', '7', '6', '5', '4', '3', '2', '1' }, { '2', '.', '.', '.', '.', '.', '.', '.', '.' },
{ '3', '.', '.', '.', '.', '.', '.', '.', '.' }, { '4', '.', '.', '.', '.', '.', '.', '.', '.' },
{ '5', '.', '.', '.', '.', '.', '.', '.', '.' }, { '6', '.', '.', '.', '.', '.', '.', '.', '.' },
{ '7', '.', '.', '.', '.', '.', '.', '.', '.' }, { '8', '.', '.', '.', '.', '.', '.', '.', '.' },
{ '9', '.', '.', '.', '.', '.', '.', '.', '.' } };
boolean flag1 = isValidSudoku(a);
System.out.println(flag1);
char b[][] = { { '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 flag2 = isValidSudoku(b);
System.out.println(flag2);
}
}