判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。
数独部分空格内已填入了数字,空白格用 '.'
表示。
public boolean isValidSudoku(char[][] board) {
int rowNum = board.length;
int colNum = board[0].length;
Map<Integer, Integer>[] rows = new HashMap[rowNum];
Map<Integer, Integer>[] cols = new HashMap[rowNum];
Map<Integer, Integer>[] boxs = new HashMap[rowNum];
for (int i = 0; i < rowNum; i++) {
rows[i] = new HashMap<>();
cols[i] = new HashMap<>();
boxs[i] = new HashMap<>();
}
for (int i = 0; i < rowNum; i++) {
for (int j = 0; j < colNum; j++) {
if (board[i][j] != '.') {
int num = board[i][j];
int index = (i / 3) * 3 + j / 3;
rows[i].put(num, rows[i].getOrDefault(num, 0) + 1);
cols[j].put(num, cols[j].getOrDefault(num, 0) + 1);
boxs[index].put(num, boxs[index].getOrDefault(num, 0) + 1);
if (rows[i].get(num) > 1 || cols[j].get(num) > 1 || boxs[index].get(num) > 1) {
return false;
}
}
}
}
return true;
}