题目描述:
注意:
示例 1:
示例 2:
思路
按照规则分别遍历行列以及3x3小网格行列,依次判断(太慢了,时间复杂度只超过5%)
代码实现:
class Solution {
public boolean isValidSudoku(char[][] board) {
int[] nums = new int[10];
for (int i = 0; i < 9; i++) {
Arrays.fill(nums, 0);
for (int j = 0; j < 9; j++) {
char ch = board[i][j];
if (ch != '.') {
int num = Integer.valueOf(ch + "");
nums[num]++;
if (nums[num] > 1) return false;
}
}
}
for (int i = 0; i < 9; i++) {
Arrays.fill(nums, 0);
for (int j = 0; j < 9; j++) {
char ch = board[j][i];
if (ch != '.') {
int num = Integer.valueOf(ch + "");
nums[num]++;
if (nums[num] > 1) return false;
}
}
}
for (int i = 0; i < 9; i+= 3) {
for (int j = 0; j < 9; j+= 3) {
Arrays.fill(nums, 0);
if (!isValid(nums, board, i, j)) return false;
}
}
return true;
}
public boolean isValid(int[] nums, char[][] board, int i1, int j) {
int i2 = i1 + 3;
int j2 = j + 3;
for (; i1 < i2; i1++) {
int j1 = j;
for (; j1 < j2; j1++) {
char ch = board[i1][j1];
if (ch != '.') {
int num = Integer.valueOf(ch + "");
nums[num]++;
if (nums[num] > 1) return false;
}
}
}
return true;
}
}