Valid Sudoku

Q: 九宫独。

判断一个board是否是有效的九宫独。用三个二维数组标记,row,col,block:row[i][j]表示第i行数字j+1是否已经出现过,col和block数组同理。

对于board[i][j],对应的block计算是:i - i%3+j/3

    bool isValidSudoku(vector<vector<char> > &board) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int n = board.size();
        if(n==0)
            return true;
        vector<vector<bool>> row(n,vector<bool>(n,false));
        vector<vector<bool>> col(n,vector<bool>(n,false));
        vector<vector<bool>> block(n,vector<bool>(n,false));
        
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(board[i][j]=='.') continue;
                int num = board[i][j] - '1';
                if(row[i][num]||col[j][num]||block[i - i % 3 + j / 3][num])
                    return false;
                row[i][num] = col[j][num] = block[i - i % 3 + j / 3][num] = true;
            }
        }
        
        return true;
        
    }

  

posted @ 2013-09-30 10:41  summer_zhou  阅读(171)  评论(0编辑  收藏  举报