[leetcode] Valid Sudoku

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.


class Solution {
public:
    bool isValidSudoku(vector<vector<char> > &board) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int tmp[10];
        for(int i=0 ; i<10 ; i++)
            tmp[i]=0;
        for(int i=0 ; i<9 ; i++){
            for(int j=0 ; j<9 ; j++){
                if(board[i][j]!='.'){
                    tmp[board[i][j]-'1']++;
                    if(tmp[board[i][j]-'1']>1)
                        return false;

                }
            }
            for(int k=0 ; k<10 ; k++)
                tmp[k]=0;
        }
        for(int i=0 ; i<9 ; i++){
            for(int j=0 ; j<9 ; j++){
                if(board[j][i]!='.'){
                    tmp[board[j][i]-'1']++;
                    if(tmp[board[j][i]-'1']>1)
                        return false;
                }
            }
            for(int k=0 ; k<10 ; k++)
                tmp[k]=0;
        }
        for(int i=0 ; i<9 ; i++){
            tmp[board[0+3*(i/3)][0+3*(i%3)]=='.'?9:(board[0+3*(i/3)][0+3*(i%3)]-'1')]++;
            tmp[board[0+3*(i/3)][1+3*(i%3)]=='.'?9:(board[0+3*(i/3)][1+3*(i%3)]-'1')]++;
            tmp[board[0+3*(i/3)][2+3*(i%3)]=='.'?9:(board[0+3*(i/3)][2+3*(i%3)]-'1')]++;
            tmp[board[1+3*(i/3)][0+3*(i%3)]=='.'?9:(board[1+3*(i/3)][0+3*(i%3)]-'1')]++;
            tmp[board[1+3*(i/3)][1+3*(i%3)]=='.'?9:(board[1+3*(i/3)][1+3*(i%3)]-'1')]++;
            tmp[board[1+3*(i/3)][2+3*(i%3)]=='.'?9:(board[1+3*(i/3)][2+3*(i%3)]-'1')]++;
            tmp[board[2+3*(i/3)][0+3*(i%3)]=='.'?9:(board[2+3*(i/3)][0+3*(i%3)]-'1')]++;
            tmp[board[2+3*(i/3)][1+3*(i%3)]=='.'?9:(board[2+3*(i/3)][1+3*(i%3)]-'1')]++;
            tmp[board[2+3*(i/3)][2+3*(i%3)]=='.'?9:(board[2+3*(i/3)][2+3*(i%3)]-'1')]++;
            for(int i=0 ; i<9 ; i++){
                if(tmp[i]>1)
                    return false;
            }
            for(int k=0 ;k<10 ;k++)
                tmp[k]=0;
        }
        return true;
    }
};


你可能感兴趣的:([leetcode] Valid Sudoku)