Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
1-9 without repetition.1-9 without repetition.3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.Note:
Example 1:
Input: board = [["5","3",".",".","7",".",".",".","."] ,["6",".",".","1","9","5",".",".","."] ,[".","9","8",".",".",".",".","6","."] ,["8",".",".",".","6",".",".",".","3"] ,["4",".",".","8",".","3",".",".","1"] ,["7",".",".",".","2",".",".",".","6"] ,[".","6",".",".",".",".","2","8","."] ,[".",".",".","4","1","9",".",".","5"] ,[".",".",".",".","8",".",".","7","9"]] Output: true
Example 2:
Input: board = [["8","3",".",".","7",".",".",".","."] ,["6",".",".","1","9","5",".",".","."] ,[".","9","8",".",".",".",".","6","."] ,["8",".",".",".","6",".",".",".","3"] ,["4",".",".","8",".","3",".",".","1"] ,["7",".",".",".","2",".",".",".","6"] ,[".","6",".",".",".",".","2","8","."] ,[".",".",".","4","1","9",".",".","5"] ,[".",".",".",".","8",".",".","7","9"]] Output: false Explanation: Same as Example 1, except with the 5 in the top left corner being modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.
Constraints:
board.length == 9board[i].length == 9board[i][j] is a digit 1-9 or '.'.class Solution
{
public:
bool isValidSudoku(vector<vector<char> > &board)
{
int used1[9][9] = {0}, used2[9][9] = {0}, used3[9][9] = {0};
for(int i = 0; i < board.size(); ++ i)
for(int j = 0; j < board[i].size(); ++ j)
if(board[i][j] != '.')
{
int num = board[i][j] - '0' - 1, k = i / 3 * 3 + j / 3;
if(used1[i][num] || used2[j][num] || used3[k][num])
return false;
used1[i][num] = used2[j][num] = used3[k][num] = 1;
}
return true;
}
};class Solution {
public boolean isValidSudoku(char[][] board) {
int m = board.length, n = board[0].length;
for (int i = 0; i < m; i++) {
boolean[] vis = new boolean[10];
for (int j = 0; j < n; j++) {
if (board[i][j] == '.')
continue;
if (vis[board[i][j] - '0'])
return false;
vis[board[i][j] - '0'] = true;
}
}
for (int j = 0; j < n; j++) {
boolean[] vis = new boolean[10];
for (int i = 0; i < m; i++) {
if (board[i][j] == '.')
continue;
if (vis[board[i][j] - '0'])
return false;
vis[board[i][j] - '0'] = true;
}
}
for (int g = 0; g < 3; g++) {
for (int h = 0; h < 3; h++) {
boolean[] vis = new boolean[10];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[g * 3 + i][h * 3 + j] == '.')
continue;
if (vis[board[g * 3 + i][h * 3 + j] - '0'])
return false;
vis[board[g * 3 + i][h * 3 + j] - '0'] = true;
}
}
}
}
return true;
}
}