36. Valid Sudoku

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Solution {
public boolean isValidSudoku(char[][] board) {
boolean[] appear = new boolean[9];

for (int i = 0; i < 9; i++) {
Arrays.fill(appear, false);
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.') {
continue;
}

if (appear[board[i][j] - '1']) {
return false;
} else {
appear[board[i][j] - '1'] = true;
}
}
}

for (int j = 0; j < 9; j++) {
Arrays.fill(appear, false);
for (int i = 0; i < 9; i++) {
if (board[i][j] == '.') {
continue;
}

if (appear[board[i][j] - '1']) {
return false;
} else {
appear[board[i][j] - '1'] = true;
}
}
}

for (int i = 0; i <= 6; i += 3) {
for (int j = 0; j <= 6; j += 3) {
Arrays.fill(appear, false);
for (int k = i; k < i + 3; k++) {
for (int l = j; l < j + 3; l++) {
if (board[k][l] == '.') {
continue;
}

if (appear[board[k][l] - '1']) {
return false;
} else {
appear[board[k][l] - '1'] = true;
}
}
}
}
}

return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public boolean isValidSudoku(char[][] board) {
int[][] rows = new int[9][9];
int[][] cols = new int[9][9];
int[][][] boxes = new int[3][3][9];

for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
int index = board[i][j] - '1';

rows[i][index]++;
cols[j][index]++;
boxes[i / 3][j / 3][index]++;

if (rows[i][index] > 1 || cols[j][index] > 1 || boxes[i / 3][j / 3][index] > 1) {
return false;
}
}
}
}

return true;
}
}

References

36. Valid Sudoku