61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
#include <bits/stdc++.h>
|
|
using namespace std;
|
|
|
|
class Solution {
|
|
public:
|
|
bool checkRepeat(bitset<9>& bs, char c) {
|
|
if (c != '.') {
|
|
int d = c - '1';
|
|
if (bs[d]) return true;
|
|
bs.flip(d);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool isRowValid(vector<vector<char>>& board, int row) {
|
|
bitset<9> bs(0);
|
|
for (auto c : board[row]) {
|
|
if (checkRepeat(bs, c)) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool isColValid(vector<vector<char>>& board, int col) {
|
|
bitset<9> bs(0);
|
|
for (int i = 0; i < 9; i++) {
|
|
char c = board[i][col];
|
|
if (checkRepeat(bs, c)) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool isSecValid(vector<vector<char>>& board, int row, int col) {
|
|
bitset<9> bs(0);
|
|
for (int i = row; i < row + 3; i++) {
|
|
for (int j = col; j < col + 3; j++) {
|
|
char c = board[i][j];
|
|
if (checkRepeat(bs, c)) return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool isValidSudoku(vector<vector<char>>& board) {
|
|
for (int i = 0; i < 9; i++) {
|
|
if (!isRowValid(board, i)) return false;
|
|
}
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
if (!isColValid(board, i)) return false;
|
|
}
|
|
|
|
for (int i = 0; i < 9; i += 3) {
|
|
for (int j = 0; j < 9; j += 3) {
|
|
if (!isSecValid(board, i, j)) return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
};
|