理解这个数独解算器的部分

understanding parts of this Sudoku solver

我对以下代码片段有疑问。这是我在 youtube 上找到的数独解算器。它使用递归回溯算法来求解。我只是想从中学习,但我被困在某些部分。 以下代码段是一个布尔值,用于检查数字是否在 3x3 框中,稍后将在 solve() 方法中使用。

// we check if a possible number is in its 3x3 box
private boolean isInBox(int row, int col, int number) {
    int r = row - row % 3;
    int c = col - col % 3;

    for (int i = r; i < r + 3; i++)
        for (int j = c; j < c + 3; j++)
            if (board[i][j] == number)
                return true;

    return false;
}

我只是不明白这是怎么回事。 row - row % 3 是做什么的?然后在 for 循环中 i < r + 3 也让我感到困惑。我了解行和列检查器,这些很简单,但是这里的逻辑让我逃避了。

rowcol 可以是 0 到 8 之间的任何值。它们定义了 9x9 数独游戏中的一个位置。

循环需要检查位置 row,col 所在的特定 3x3 框。

int r = row - row % 3; 在同一个 3x3 框中找到第一行的索引。

int c = col - col % 3; 在同一 3x3 框中查找第一列的索引。

两者都将输入值转换为输出为:

0 -> 0
1 -> 0
2 -> 0
3 -> 3
4 -> 3
5 -> 3
6 -> 6
7 -> 6
8 -> 6

循环然后检查从 r,cr+2,c+2(含)的每个位置,寻找指定的值 number.