Valid Sudoku
- leetcode 36
- Easy
- Company Tags: Snapchat, Uber, Apple
- Similar Problems: Sudoku Solver;
Description
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
'.'
.
Previous Thinking
check the conditions for each position. The hints given recommend using HashSet. However, I think using array is more easy understanding.
C++ Solution
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool check_column[9][9] = {false};
bool check_row[9][9] = {false};
bool check_block[9][9] = {false};
for(int i = 0; i < 9; ++i ){
for(int j = 0; j < 9; ++j){
if(board[i][j] != '.'){
int temp = board[i][j] - '1';
if(check_row[i][temp] || check_column[j][temp] || check_block[i / 3 * 3 + j / 3][temp]){
return false;
}else{
check_column[j][temp] = true;
check_row[i][temp] = true;
check_block[i / 3 * 3 + j / 3 ][temp] = true;
}
}
}
}
return true;
}
};
Java Solution
public class Solution {
public boolean isValidSudoku(char[][] board) {
boolean[][] check_row = new boolean[9][9];
boolean[][] check_column = new boolean[9][9];
boolean[][] check_block = new boolean[9][9];
for(int i = 0; i < 9; ++i){
for(int j = 0; j < 9; ++j){
if(board[i][j] != '.'){
int temp = board[i][j] - '1';
if(check_row[i][temp] || check_column[j][temp] || check_block[i / 3 * 3 + j / 3][temp]){
return false;
}else{
check_row[i][temp] = true;
check_column[j][temp] = true;
check_block[i / 3 * 3 + j / 3][temp] = true;
}
}
}
}
return true;
}
}
Notice
- initialization rules of Array are different in C++ and Java
- Encoding method is the tricky part.