Leetcode 036有效的数独

地址

https://leetcode-cn.com/problems/valid-sudoku/submissions/

描述

在这里插入图片描述

代码

y总的代码

class Solution {
    
    
public:
    bool isValidSudoku(vector<vector<char>>& b) {
    
    
        bool stu[9];
        //数字 1-9 在每一行只能出现一次。
        for(int i=0;i<9;i++){
    
    
            memset(stu,0,sizeof stu);
            for(int j=0;j<9;j++){
    
    
                if(b[i][j]!='.'){
    
    
                int t=b[i][j]-'1';
                if(stu[t]) return false;
                else stu[t]= true;
                }
            }
        }
        //数字 1-9 在每一列只能出现一次。
        for(int i=0;i<9;i++){
    
    
            memset(stu,0,sizeof stu);
            for(int j=0;j<9;j++){
    
    
                if(b[j][i]!='.'){
    
    
                int t=b[j][i]-'1';
                if(stu[t]) return false;
                else stu[t]= true;
                }
            }
        }
        //数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次
        for(int i=0;i<9;i+=3){
    
    
            for(int j=0;j<9;j+=3){
    
    
                memset(stu,0,sizeof stu);
                //对于每个3*3矩阵分析
                for(int x=0;x<3;x++){
    
    
                    for(int y=0;y<3;y++){
    
    
                        if(b[i+x][j+y]!='.'){
    
    
                        int t=b[i+x][j+y]-'1';
                        if(stu[t]) return false;
                        else stu[t]=true;
                        }
                        
                    }
                }
            }
        }
        return true;
    }
};

我自己写的

class Solution {
    
    
public:
    bool isValidSudoku(vector<vector<char>>& board) {
    
    
        //每数字 1-9 在每一行只能出现一次。
        unordered_map<char,int> num;
        for(int i=0;i<board.size();i++){
    
    
            for(int j=0;j<board[0].size();j++){
    
    
                 if(board[i][j]=='.') continue;
                if(num[board[i][j]]>0) return false;
                else num[board[i][j]]++;
             }
             //每次执行完毕都要清0
             num.clear();
        }
        num.clear();//清空数组
        //数字 1-9 在每一列只能出现一次。
        for(int i=0;i<board[0].size();i++){
    
    
            for(int j=0;j<board.size();j++){
    
    
                 if(board[j][i]=='.') continue;
                if(num[board[j][i]]>0) return false;
                else num[board[j][i]]++;
             }
             num.clear();
        }
        //数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
        for(int n=0;n<9;n++){
    
    
            for(int i=(n%3)*3;i<(n%3+1)*3;i++){
    
    
                for(int j=(n/3)*3;j<(n/3+1)*3;j++){
    
    
                    if(board[i][j]=='.') continue;
                    if(num[board[i][j]]>0) return false;
                    else num[board[i][j]]++;
                }
            }
            num.clear();
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121467508