Leetcode36. 有效的数独c++

思路:
分别用row,column,palace记录每行,每列,每个宫格里的数,第一次出现时,记为true,第二次出现时返回false.
例如:当i=0,c=2时,row[0][c-‘1’]=true;表示第一行出现了一次2,再次出现时利用if语句直接返回false.
其中 int k=i/3*3+j/3; palace[k][c-‘1’] 表示第几个宫格是否出现了某个数。
宫格的下标为:
0 1 2
3 4 5
6 7 8

class Solution {
public:
    bool isValidSudoku(vector>& board) {
     bool row[9][9]={},column[9][9]={},palace[9][9]={};
        for(int i=0;i<9;++i)
        {
            for(int j=0;j<9;++j)
            {
                if(board[i][j]!='.')
                {
                    char c=board[i][j];
                    if(row[i][c-'1']) return false;
                    else row[i][c-'1']=true;
                    if(column[j][c-'1']) return false;
                    else column[j][c-'1']=true;
                    int k=i/3*3+j/3;
                    if(palace[k][c-'1']) return false;
                    else palace[k][c-'1']=true;
                }
            }
        }
        return true;
        
    }
};

你可能感兴趣的:(Leetcode36. 有效的数独c++)