原题链接:Leecode 36. 有效的数独
解法一:哈希
class Solution {
public:
int row[10][10];//行
int col[10][10];//列
int box[10][10];//宫
bool isValidSudoku(vector<vector<char>>& board) {
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(board[i][j]=='.')
continue;
else
{
int tmp=board[i][j]-'0';
int index=(j/3)*3+i/3;
if(row[i][tmp] || col[j][tmp] || box[index][tmp])
return false;
box[index][tmp]=1;
row[i][tmp]=1;
col[j][tmp]=1;
}
}
}
return true;
}
};
解法二:位运算
class Solution {
public:
int row[10];//行
int col[10];//列
int box[10];//宫
bool isValidSudoku(vector<vector<char>>& board) {
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(board[i][j]=='.')
continue;
else
{
int tmp=board[i][j]-'0';
int index=(j/3)*3+i/3; //该数在哪一个宫中
if(((row[i]>>tmp)&1) || ((col[j]>>tmp)&1) || ((box[index]>>tmp)&1) )
return false;
box[index]|=(1<<tmp);//将第tmp位置1
row[i]|=(1<<tmp);
col[j]|=(1<<tmp);
}
}
}
return true;
}
};