数独计数子字段

Sudoku count subfield

我目前正在研究 SudokuChecker 我想检查数独的子字段 [3x3]。以下代码执行此操作:

int[][] field = new field[9][9];
int wrongNumbers = 0;
for (int i = 0; i < 9; i += 3) {
    for (int j = 0; j < 9; j += 3) {

        // Check subfield by using an array
        int arr[] = new int[10];
        for (int k = 0; k < 3; k++) {
            for (int l = 0; l < 3; l++) {
                arr[field[i + k][j + l]]++;
            }
        }

        for (int k = 1; k < arr.length; k++) {
            wrongNumbers += arr[k] > 1 ? arr[k] - 1 : 0;
        }
    }
}

我想知道给定的代码有什么改进吗? (我不是在谈论使 39 等常量)

我在 thucnguyen 的 Codefights 中找到了一个很好的答案:

boolean sudoku(int[][] grid) {
    for (int i = 0; i <9; i++) {
        int row = 0, col = 0, group = 0;
        for (int j = 0; j <9; j++) {
            // check for row i
            row += grid[i][j];

            // check for col i
            col += grid[j][i];

            // check for sub-grid i
            group += grid[i / 3 * 3 + j / 3][i % 3 * 3 + j % 3];
        }

        if (row != 45 || col != 45 || group != 45)  return false;
    }

    return true;
}