LeetCode

LeetCode-36 有效的数组

nkul · 10月2日 · 2020年 28次已读
class Solution {
public:
    bool isValidSudoku(vector>& board) {
        bool st[9];
        //判断行
        for(int i = 0;i < 9 ;i++){
            memset(st,0 , sizeof st);
            for(int j = 0;j < 9 ; j++){
                if(board[i][j] != '.'){
                    int t = board[i][j] - '1';
                    if(st[t]) return false;
                    st[t] = true;
                }
            }
        }

        //判断列
        for(int i = 0;i < 9 ;i++){
            memset(st,0 , sizeof st);
            for(int j = 0;j < 9 ; j++){
                if(board[j][i] != '.'){
                    int t = board[j][i] - '1';
                    if(st[t]) return false;
                    st[t] = true;
                }
            }
        }

        //判断小方格
        /*
        (i,j)是小方格左上角的坐标
        (x,y)是相对左上角元素相对位置
        */
        for(int i = 0 ; i < 9 ;i+=3){
            for( int j = 0 ; j < 9 ;j += 3){
                memset(st,0 , sizeof st);
                
                for(int x = 0;x < 3; x++){
                    for(int y = 0; y < 3 ;y++){
                        if(board[i + x][j + y]!='.'){
                            int t = board[i + x][j + y] - '1';
                            if(st[t]) return false;
                            st[t] = true;
                        }
                    }
                }
            }
        }
        return true;
    }
};


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!