import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param board char字符型二维数组
     * @return bool布尔型
     */
    public boolean isValidTwilightSudoku (char[][] board) {
        // write code here
        HashSet<String> seen = new HashSet<>();

        for (int i = 0; i < 9; ++i) {
            for (int j = 0; j < 9; ++j) {
                char number = board[i][j];
                if (number != '.') {
                    String row = "row " + i + number;
                    String col = "col " + j + number;
                    String box = "box " + i / 3 + '-' + j / 3 + number;

                    if (seen.contains(row) || seen.contains(col) || seen.contains(box)) {
                        return false;
                    }

                    seen.add(row);
                    seen.add(col);
                    seen.add(box);
                }
            }
        }
        return true;
    }
}

编程语言是Java。

考察的是对二维数组的遍历和判断,以及使用哈希集合来检查数独规则是否满足。

具体代码的文字解释如下:

  • 使用两层循环遍历数独棋盘中的每个单元格:外层循环遍历行,内层循环遍历列。
  • 对于每个单元格,我们获取其对应的数字 number
  • 如果 number 不是空位(即不是'.'),则根据该数字所在的行、列和3x3网格构造三个字符串 rowcol 和 box,分别表示该数字所在的行、列和3x3网格。
  • 判断 seen 集合中是否已经存在 rowcol 或 box 来确定数独规则是否满足。如果存在重复的字符串,说明数独规则不满足,直接返回 false
  • 如果不存在重复的字符串,则将 rowcol 和 box 添加到 seen 集合中,表示已经出现过该行、列和3x3网格。
  • 循环结束后,如果没有发现任何不满足数独规则的情况,则返回 true,表示数独规则全部满足。