Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
class Solution {
private:
bool isValidSudoku(vector<vector<char>> board, int x, int y) {
bool flags[9] = {0};
for(int i = 0; i < 9; ++i) {
if(board[x][i] == '.') continue;
if(board[x][i] >= '1' && board[x][i] <= '9') {
if(!flags[board[x][i] - '1']) flags[board[x][i] - '1'] = true;
else return false;
}
}
memset(flags, 0, 9);
for(int j = 0; j < 9; j++) {
if(board[j][y] == '.') continue;
if(board[j][y] >= '1' && board[j][y] <= '9') {
if(!flags[board[j][y] - '1']) flags[board[j][y] - '1'] = true;
else return false;
}
}
memset(flags, 0, 9);
int xx = x / 3 * 3;
int yy = y / 3 * 3;
for(int i = 0; i < 3; ++i) {
for(int j = 0; j < 3; ++j) {
if(board[xx + i][yy + j] == '.') continue;
if(board[xx + i][yy + j] >= '1' && board[xx + i][yy + j] <= '9') {
if(!flags[board[xx + i][yy + j] - '1']) flags[board[xx + i][yy + j] - '1'] = true;
else return false;
}
}
}
return true;
}
public:
bool isValidSudoku(vector<vector<char>>& board) {
for(int i = 0; i < 9; ++i) {
for(int j = 0; j < 9; ++j) {
if(!isValidSudoku(board, i, j)) return false;
}
}
return true;
}
};