Sri
BAN USERCEO of Srix Inc.
sudoku checker ... didn't compile it or anything like that...
class Sudoku {
private void reset(HashSet<Integer> set) {
if (!set.isEmpty()) {
set = new HashSet<Integer>();
}
for (int i = 1; i < 10; i++)
set.add(i);
}
private boolean checkRow(int[][] board, HashSet<Integer> set) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (!set.remove(board[i][j]))
return false;
}
reset(set);
}
return true;
}
private boolean checkCol(int[][] board, HashSet<Integer> set) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (!set.remove(board[j][i]))
return false;
}
reset(set);
}
return true;
}
private boolean checkBox(int[][] board, HashSet<Integer> set) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int row = i*3; row < i*3 + 3; row++) {
for (int col = j*3; col < j*3 + 3; col++) {
if (!set.remove(board[row][col]))
return false;
}
}
reset(set);
}
}
return true;
}
public boolean check(int[][] board) {
HashSet<Integer> set = new HashSet<Integer>();
reset(set);
return (checkRow(board,set) && checkCol(board,set) && checkBox(board,set));
}
}
Fixed sized board, fixed sized check. Code runs in constant time upper bound. Do you have a better runtime than constant?
- Sri October 02, 2013