思路:3种情况,
1)每一行中,1-9个数字不能出现相同的数字,二重循环判断;
2)每一列同1)的原理一样
3)每9个格子不能出现相同的数字,事先确定好每一个格子的行列范围(可以采用左上角和右下角的行列作为标识)
code:
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
int gridIndex[9][4] = {{0,0,2,2},{0,3,2,5},{0,6,2,8},
{3,0,5,2},{3,3,5,5},{3,6,5,8},
{6,0,8,2},{6,3,8,5},{6,6,8,8} };//格子位置
bool hashTable[10] = {0};
for(int i=0;i<9;i++){
for(int k=0;k<10;k++) hashTable[k] = false;
for(int j=0;j<9;j++){
if(board[i][j] == '.')continue;
if(hashTable[board[i][j]-'0']) return false;
else
hashTable[board[i][j]-'0'] = true;
}
}
for(int j=0;j<9;j++){
for(int k=0;k<10;k++) hashTable[k] = false;
for(int i=0;i<9;i++){
if(board[i][j] == '.')continue;
if(hashTable[board[i][j]-'0']) return false;
else
hashTable[board[i][j]-'0'] = true;
}
}
for(int grid = 0;grid<9;grid++){
for(int k=0;k<10;k++) hashTable[k] = false;
for(int i=gridIndex[grid][0];i<=gridIndex[grid][2];i++)
for(int j=gridIndex[grid][1];j<=gridIndex[grid][3];j++){
if(board[i][j] == '.')continue;
if(hashTable[board[i][j]-'0']) return false;
else
hashTable[board[i][j]-'0'] = true;
}
}
return true;
}
};