思路: 依次对每行每列,3×3的正方形判断即可。
注意
1:用位运算判断重复更巧妙一点
2:别忘记了判断每行每列!!!
class Solution {
public:
bool judge(vector<vector<char>>& board, int m, int n);
bool isValidSudoku(vector<vector<char>>& board) {
//对每一行判断
for (int i = 0; i < 9; ++i) {
int status = 0;
for (int j = 0; j < 9; ++j) {
if (board[i][j] == '.') continue;
else {
int bit = (1 << (board[i][j] - '0'));
if (status & bit) return false;
else status |= bit;
}
}
}
//对每一列判断
for (int j = 0; j < 9; ++j) {
int status = 0;
for (int i = 0; i < 9; ++i) {
if (board[i][j] == '.') continue;
else {
int bit = (1 << (board[i][j] - '0'));
if (status & bit) return false;
else status |= bit;
}
}
}
//对每个九宫格判断
for (int i = 0; i < 9; i += 3) {
for (int j = 0; j < 9; j += 3) {
if (!judge(board, i, j)) {
return false;
}
}
}
return true;
}
};
bool Solution::judge(vector<vector<char>>& board, int m, int n) {
int status = 0;
for (int i = m; i < m + 3; ++i) {
for (int j = n; j < n + 3; ++j) {
if (board[i][j] == '.') continue;
else {
int bit = (1 << (board[i][j] - '0'));
if (status & bit) return false;
else status |= bit;
}
}
}
return true;
}