本题与数独关系不大,主要是判断在一个9X9的矩阵中每行元素、每列元素和没3X3的子矩阵中是否包含重复元素。
可以采用数组或HashMap来记录每行、每列或每个子矩阵中出现过的元素,并记录出现次数,这样只需要对矩阵使用一次遍历便可以完成记录。最后判断一下是否存在出现次数大于2的元素即可。
class Solution {
public boolean isValidSudoku(char[][] board) {
Map<Integer, Integer>[] rows = new HashMap[9];
Map<Integer, Integer>[] cols = new HashMap[9];
Map<Integer, Integer>[] boxes = new HashMap[9];
for (int i = 0; i < 9; i++) {
rows[i] = new HashMap<Integer, Integer>();
cols[i] = new HashMap<Integer, Integer>();
boxes[i] = new HashMap<Integer, Integer>();
}
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
int n = (int)board[i][j];
int boxIndex = (i/3)*3 + j/3;
if(board[i][j] != '.'){
rows[i].put(n, rows[i].getOrDefault(n, 0)+1);
cols[j].put(n, cols[j].getOrDefault(n, 0)+1);
boxes[boxIndex].put(n, boxes[boxIndex].getOrDefault(n, 0)+1);
}
if(rows[i].get(n) > 1 || cols[j].get(n) > 1 || boxes[boxIndex].get(n) > 1){
return false;
}
}
}
return true;
}
}