Leetcode 36 Valid Sudoku 数独的合法性判断

来源:互联网 发布:东非解放军 知乎 编辑:程序博客网 时间:2024/04/26 03:17

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.


A partially filled sudoku which is valid.

Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

数独合法性判断。

模拟题,直接用位运算代替hash了,注意细节问题不是太大。

class Solution {public:    bool isValidSudoku(vector<vector<char>>& board) {        int cnt=0;        for(int i=0;i<7;i+=3)        {            for(int j=0;j<7;j+=3)            {   //9宫格                int vis=0,vis1=0,vis2=0;                for(int k=0;k<3;k++)                    for(int l=0;l<3;l++)                    {                        if(board[i+k][j+l]=='.') continue;                        if((1<<(board[i+k][j+l]-'0') & vis)==0)                            vis|=(1<<(board[i+k][j+l]-'0'));                        else                            return false;                    }                for(int k=0;k<9;k++)                {                    if(board[cnt][k]!='.')                    {                        if((1<<(board[cnt][k]-'0') & vis2)==0)                            vis2|=(1<<(board[cnt][k]-'0'));                        else                            return false;                    }                    if(board[k][cnt]!='.')                    {                        if((1<<(board[k][cnt]-'0') & vis1)==0)                            vis1|=(1<<(board[k][cnt]-'0'));                        else                            return false;                    }                }                cnt++;            }        }        return true;    }};


0 0
原创粉丝点击