[LeetCode] 36. 有效的数独
2018-04-11 本文已影响0人
拉面小鱼丸
PS:开始偷懒了,直接上图
JAVA
class Solution {
public boolean isValidSudoku(char[][] board) {
HashSet[] sets = new HashSet[11];
for (int i = 0; i < 11; i++) {
sets[i] = new HashSet();
}
for (int i = 0; i < 9; i++) {
sets[9].clear();
sets[10].clear();
for (int j = 0; j < 9; j++) {
char c = board[i][j];
if (c != '.') {
if (!sets[9].add(c)) {
return false;
}
}
char c2 = board[j][i];
if (c2 != '.') {
if (!sets[10].add(c2)) {
return false;
}
}
if (c != '.') {
int i1 = i / 3;
int j1 = j / 3;
if (i1 == 0 && j1 == 0) {
if (!sets[0].add(c)) {
return false;
}
} else if (i1 == 0 && j1 == 1) {
if (!sets[1].add(c)) {
return false;
}
} else if (i1 == 0 && j1 == 2) {
if (!sets[2].add(c)) {
return false;
}
} else if (i1 == 1 && j1 == 0) {
if (!sets[3].add(c)) {
return false;
}
} else if (i1 == 1 && j1 == 1) {
if (!sets[4].add(c)) {
return false;
}
} else if (i1 == 1 && j1 == 2) {
if (!sets[5].add(c)) {
return false;
}
} else if (i1 == 2 && j1 == 0) {
if (!sets[6].add(c)) {
return false;
}
} else if (i1 == 2 && j1 == 1) {
if (!sets[7].add(c)) {
return false;
}
} else if (i1 == 2 && j1 == 2) {
if (!sets[8].add(c)) {
return false;
}
}
}
}
}
return true;
}
}
优化
class Solution {
public boolean isValidSudoku(char[][] board) {
boolean[][][] arrs = new boolean[3][9][9];
// arrs[0][][] 记录行
// arrs[1][][] 记录列
// arrs[2][][] 记录宫格
int v;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.') {
continue;
}
// char c = board[i][j];
// int v = Integer.parseInt("" + c) -1;
v = board[i][j] - '1';
if (arrs[0][i][v] || arrs[1][j][v] || arrs[2][i / 3 * 3 + j / 3][v]) {
return false;
} else {
arrs[0][i][v] = true;
arrs[1][j][v] = true;
arrs[2][i / 3 * 3 + j / 3][v] = true;
}
}
}
return true;
}
}