36 - Valid Sudoku
Written on October 21, 2015
Tweet
Determine whether a Sudoku is valid.The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’
public class Solution {
public boolean isValidSudoku(char[][] board) {
if (board == null || board.length == 0) return true;
int n = board.length;
Set<character> s1, s2;
for (int i = 0; i < n; i++) {
s1 = new HashSet<character>();
s2 = new HashSet<character>();
for (int j = 0; j < n; j++) {
if (!s1.add(board[i][j]) && board[i][j] != '.') {
return false;
}
if (!s2.add(board[j][i]) && board[j][i] != '.') {
return false;
}
}
}
for (int i = 0; i < n; i += 3) {
for (int j = 0; j < n; j+= 3) {
s1 = new HashSet<character>();
for (int l = i; l < i + 3; l++) {
for (int k = j; k < j + 3; k++) {
if (!s1.add(board[l][k]) && board[l][k] != '.') {
return false;
}
}
}
}
}
return true;
}
}
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
if not board:
return False
for i in range(9):
s1, s2 = set(), set()
for j in range(9):
if board[i][j] != "." and board[i][j] in s1:
return False
if board[j][i] != "." and board[j][i] in s2:
return False
s1.add(board[i][j])
s2.add(board[j][i])
for i in range(0, 9, 3):
for j in range(0, 9, 3):
s3 = set()
for k in range(i, i + 3):
for l in range(j, j + 3):
if board[k][l] != "." and board[k][l] in s3:
return False
s3.add(board[k][l])
return True