class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
//判断(i,j)处于哪个九宫格 j/3 i%3
//判断是否有重合
//记录某一行是否有重复数字 [i,num] i:某行 num:数字
vector<vector<bool>> row(9,vector<bool>(9,false));
//记录某一列是否有重复数字 [i,num] i:某列 num:数字
vector<vector<bool>> col(9,vector<bool>(9,false));
//记录某个九宫格是否有重复数字 [i,num] i:某个九宫格
vector<vector<bool>> block(9,vector<bool>(9,false));
//遍历一次 i行j列
for(int i = 0;i<9;i++){
for(int j = 0;j<9;j++){
if(board[i][j]!='.'){
int num = board[i][j]-'1';
int blockIndex = i/3*3+j/3;
if(row[i][num]||col[j][num]||block[blockIndex][num]){
//重复
return false;
}
//否则
row[i][num] = true;
col[j][num] = true;
block[blockIndex][num] = true;
}
}
}
//没有重复
return true;
}
};
力扣算法篇:有效的数独
最新推荐文章于 2024-03-27 16:39:32 发布