原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2f9gg/
解法一:
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < 9; i++) {
char[] a = new char[9];
char[] a1 = new char[9];
char[] a2 = new char[9];
for (int j = 0; j < 9; j++) {
a[j] = board[i][j];
a1[j] = board[j][i];
int x = (i%3*3) + j%3;
int y = (i/3*3) + j/3;
a2[j] = board[x][y];
}
boolean checkValue = checkValue(a);
if (!checkValue) {
return false;
}
boolean checkValue1 = checkValue(a1);
if (!checkValue1) {
return false;
}
boolean checkValue2 = checkValue(a2);
if (!checkValue2) {
return false;
}
}
return true;
}
public boolean checkValue(char[] values) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if ( values[i] != '.' && i != j && values[i] == values[j]) {
return false;
}
}
}
return true;
}
思路:数独,就是横竖小方格都不能存在相同的数字,每一个判断都是九个元素,那么我们就从二维数组中提取出每一个不能重复数字的一维数组进行校验。
横竖都好提取,就是小方格稍微麻烦点
int x = (i%3*3) + j%3;
int y = (i/3*3) + j/3;
a2[j] = board[x][y];
如上就是小方格的提取。