leetcode 0036
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
思路
分成三部分:判断行是否有效、判断列是否有效、判断3x3的方格是否有效。
遍历整个二维数组,遇到’.'直接跳过,遇到数字进行上面三个判断,有一个条件无效直接返回false。
若所有数组均满足则返回true。
class Solution {
public boolean isValidRow(char[][] board, int row, int col) {
for (int i = 0; i < 9; i++) {
if (i == col) {
continue;
} else {
if (board[row][i] == board[row][col]) {
return false;
}
}
}
return true;
}
public boolean isValidCol(char[][] board, int row, int col) {
for (int i = 0; i < 9; i++) {
if (i == row) {
continue;
} else {
if (board[i][col] == board[row][col]) {
return false;
}
}
}
return true;
}
public boolean isValid33(char[][] board, int row, int col) {
int numR = row / 3, numC = col / 3;
for (int i = 3 * numR; i < 3 * numR + 3; i++) {
for (int j = 3 * numC; j < 3 * numC + 3; j++) {
if (i == row && j == col) {
continue;
} else {
if (board[i][j] == board[row][col]) {
return false;
}
}
}
}
return true;
}
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
if (board[i][j] == '.') {
continue;
} else {
if (!(isValidRow(board, i, j) && isValidCol(board, i, j) && isValid33(board, i, j))) {
return false;
}
}
}
}
return true;
}
}