题意:是否是一个合法的数独。
即判断:①是否每行没有重复数字。
②是否每列没有重复数字。
③是否每个9宫格没有重复数字。
思路:使用数组的下标来标识一个数字(即下标数字)是否被使用过。
注意:board中的数字是用char表示的,因此要注意-‘1’(因为3个标识数组的下标是从0开始的)
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
//标识9行中,每一行0-8的八个数字是否使用过
bool row[9][9] = {false};
//标识9列中,每一列0-8的八个数字是否使用过
bool col[9][9] = {false};
//标识9个九宫格中,每个0-8的八个数字是否使用过
bool grid[3][3][9] = {false};
for(int i=0;i<board.size();i++){
for(int j=0;j<board[0].size();j++){
int index = board[i][j]-'1';
if(board[i][j]!='.'){
if(row[i][index]==false){
row[i][index] = true;
}else{
return false;
}
if(col[j][index]==false){
col[j][index] = true;
}else{
return false;
}
if(grid[i/3][j/3][index]==false){
grid[i/3][j/3][index] = true;
}else{
return false;
}
}
}
}
return true;
}
};