I implemented a Sudoku validation program. Can this be optimized even further in terms of performance?
public class ValidSudoku {
public boolean verifySudoku(int arr[][], int num, int i, int j, int row, int col) {
return (verifyRow(arr, num, i, j, col)
&& verifyCol(arr, num, i, j, row)
&& verifyGrid(arr, num, i, j));
}
public boolean verifyRow(int arr[][], int num, int i, int j, int col) {
int k;
for (k = 0; k < col; k++) {
if ((arr[i][k] == num) && (j != k)) {
return false;
}
}
return true;
}
public boolean verifyCol(int arr[][], int num, int i, int j, int row){
int k;
for (k = 0; k < row; k++) {
if ((arr[k][j] == num) && (i != k)) {
return false;
}
}
return true;
}
public boolean verifyGrid(int arr[][], int num, int i, int j) {
int k, l;
int start_row = i - (i % 3);
int start_col = j - (j % 3);
for (k = 0; k < 3; k++) {
for (l = 0; l < 3; l++) {
if ((arr[k + start_row][l + start_col] == num) && (i != k + start_row) && (j != l + start_col)) {
return false;
}
}
}
return true;
}
public static void main(String args[]) {
ValidSudoku v = new ValidSudoku();
int i, j;
int arr[][] = {{3, 1, 6, 5, 7, 8, 4, 9, 2},
{5, 2, 9, 1, 3, 4, 7, 6, 8},
{4, 8, 7, 6, 2, 9, 5, 3, 1},
{2, 6, 3, 4, 1, 5, 9, 8, 7},
{9, 7, 4, 8, 6, 3, 1, 2, 5},
{8, 5, 1, 7, 9, 2, 6, 4, 3},
{1, 3, 8, 9, 4, 7, 2, 5, 6},
{6, 9, 2, 3, 5, 1, 8, 7, 4},
{7, 4, 5, 2, 8, 6, 3, 1, 9}};
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
if (!v.verifySudoku(arr, arr[i][j], i, j, 9, 9)) {
System.out.print(arr[i][j] + "nay");
}
}
}
}
}