leetcode 36. 有效的数独[【哈希表】

本题与数独关系不大,主要是判断在一个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;
    }
}
发布了55 篇原创文章 · 获赞 0 · 访问量 775

猜你喜欢

转载自blog.csdn.net/er_ving/article/details/104920773