36. 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 ‘.’.
主要是mask可以减少内存存储,而且情况也比较特殊。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row_len = board.size();
vector<int> row (row_len,0);
vector<int> col (row_len,0);
vector<int> sqr(row_len,0);
for(int i=0;i<row_len;i++){
for(int j=0;j<board[i].size();j++){
char digit = board[i][j];
int loc = j/3*3 + i/3;
if(digit!='.'){
int mask = 1 << (digit - '0');
if((row[i]&mask)||(col[j]&mask)||(sqr[loc]&mask)){
return false;
}else{
row[i]|=mask;
col[j]|=mask;
sqr[loc]|=mask;
}
}
}
}
return true;
}
};