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.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
注意题中要求只要已出现的数不满足规则就可以了,并不是要求数独是否有解,硬做之
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
return validateRowCol( board) && validateBlock( board);
}
bool validate( vector< vector< char> > &board, int x1, int y1, int x2, int y2){
vector< char> table(256, 0);
for( int i = x1; i <= x2; ++i){
for( int j = y1; j <= y2; ++j){
if( board[i][j] == '.')
continue;
if( ++table[ board[i][j]] > 1)
return false;
}
}
return true;
}
bool validateRowCol( vector< vector< char> > &board){
int size = board.size();
for( int i = 0; i < size; ++i){
if( !validate( board, i, 0, i, size-1))
return false;
}
for( int j = 0; j < size; ++j){
if( !validate( board, 0, j, size-1, j))
return false;
}
return true;
}
bool validateBlock( vector< vector< char> > &board){
int size = board.size();
for( int i = 0; i < size; i += 3){
for( int j = 0; j < size; j += 3){
if( !validate( board, i, j, i+2, j+2))
return false;
}
}
return true;
}
};