思路:
分别用row,column,palace记录每行,每列,每个宫格里的数,第一次出现时,记为true,第二次出现时返回false.
例如:当i=0,c=2时,row[0][c-‘1’]=true;表示第一行出现了一次2,再次出现时利用if语句直接返回false.
其中 int k=i/3*3+j/3; palace[k][c-‘1’] 表示第几个宫格是否出现了某个数。
宫格的下标为:
0 1 2
3 4 5
6 7 8
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool row[9][9]={},column[9][9]={},palace[9][9]={};
for(int i=0;i<9;++i)
{
for(int j=0;j<9;++j)
{
if(board[i][j]!='.')
{
char c=board[i][j];
if(row[i][c-'1']) return false;
else row[i][c-'1']=true;
if(column[j][c-'1']) return false;
else column[j][c-'1']=true;
int k=i/3*3+j/3;
if(palace[k][c-'1']) return false;
else palace[k][c-'1']=true;
}
}
}
return true;
}
};