这里运用到的是遍历二维数组、三位数组
二维数组的第一维留下行数,第二维留下需要遍历的数字,保存的是记录该数字的次数
三维数字前两维保存的是方块所在位置,第三位记录数字,保存的是记录该数字的次数
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int rows[9][9]={0};//记录每一行每个数字出现的个数
int columns[9][9]={0};//计算每一列每个数字出现的个数
int a[3][3][9]={0};//计算每个方块每个数字出现的个数
// memset(rows,0,sizeof(rows));//初始化,记不住就用上面的大括号
// memset(columns,0,sizeof(columns));
// memset(a,0,sizeof(a));
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
char c =board[i][j];
if(c!='.'){
int id=c-'0'-1;//配合数组的0-9使用,这里也是学到强制类型转换,可以将ASCII码中的数字减去‘0’得到INT型数字
rows[i][id]++;
columns[j][id]++;
a[i/3][j/3][id]++;
if(rows[i][id]>1||columns[j][id]>1||a[i/3][j/3][id]>1) {
return false;
}
}
}
}
return true;
}
};