36. Valid Sudoku

Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

1.Each row must contain the digits 1-9 without repetition.
2.Each column must contain the digits 1-9 without repetition.
3.Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

Example 1:

Input:

[
  ["5","3",".",".","7",".",".",".","."],
  ["6",".",".","1","9","5",".",".","."],
  [".","9","8",".",".",".",".","6","."],
  ["8",".",".",".","6",".",".",".","3"],
  ["4",".",".","8",".","3",".",".","1"],
  ["7",".",".",".","2",".",".",".","6"],
  [".","6",".",".",".",".","2","8","."],
  [".",".",".","4","1","9",".",".","5"],
  [".",".",".",".","8",".",".","7","9"]
]
Output: true
Example 2:

Input:
[
  ["8","3",".",".","7",".",".",".","."],
  ["6",".",".","1","9","5",".",".","."],
  [".","9","8",".",".",".",".","6","."],
  ["8",".",".",".","6",".",".",".","3"],
  ["4",".",".","8",".","3",".",".","1"],
  ["7",".",".",".","2",".",".",".","6"],
  [".","6",".",".",".",".","2","8","."],
  [".",".",".","4","1","9",".",".","5"],
  [".",".",".",".","8",".",".","7","9"]
]
Output: false

Explanation: Same as Example 1, except with the 5 in the top left corner being
modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
Note:

A Sudoku board (partially filled) could be valid but is not necessarily solvable.
Only the filled cells need to be validated according to the mentioned rules.
The given board contain only digits 1-9 and the character '.'.
The given board size is always 9x9.


在一个循环中分别遍历所有的行和所有的列以及所有的九宫格,使用哈希表判断是否有重复的数字

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        if(board.empty() || board[0].empty()){
            return false;
        }
        int m = board.size();
        int n = board[0].size();
        
        for(int i = 0; i < m; i++){
            set<char> row;
            set<char> col;
            set<char> mat;  
            for(int j = 0; j < n; j++){
                if(board[i][j] != '.' && row.find(board[i][j]) != row.end())
                    return false;
                else
                    row.insert(board[i][j]);
                if(board[j][i] != '.' && col.find(board[j][i]) != col.end())
                    return false;
                else
                    col.insert(board[j][i]);
                int rowIndex = 3*(i/3);
                int colIndex = 3*(i%3);
                if(board[rowIndex+j/3][colIndex+j%3] != '.' && mat.find(board[rowIndex+j/3][colIndex+j%3]) != mat.end())
                    return false;
                else
                    mat.insert(board[rowIndex+j/3][colIndex+j%3]);
            }
        }
        return true;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,948评论 0 10
  • 从上了五年级后视力就直线下降,并且一发不可收拾,已经近视300多了,唉,这都是我平时的种种恶习造成的呀! “要爱护...
    四叶草的泪水阅读 513评论 0 1
  • “话说西安古都大学1号楼的一楼有个宿舍,里面住着七个不高也不矮、不丑也不帅、不穷也不富、不好也不坏、可爱的、可笑的...
    秦巴佬阅读 242评论 0 1
  • 木卫二基地沦陷后,我是作为轻伤者被送往人民医院的,优先级较低。我躺在床上看着对面床上正进行着抢救,主刀医生显然比我...
    Don半兽人阅读 334评论 0 1
  • 都说相思好,相思令人老。 几番费思量,还是相思好。 林朝英&王重阳 林朝英在留给王重阳的遗书中这样写道, 他们彼此...
    東卿阅读 4,959评论 0 4

友情链接更多精彩内容