一、知识点:
HashSet
二、文字分析:
- 根据数独规则,分别检查每一行、每一列和每一个宫格,判断是否出现了重复的数字。
- 创建一个HashSet集合,用于存储已经出现过的数字。
- 遍历整个数独,对于每个位置上的数字,执行以下步骤:如果数字不是’.',则判断该数字是否在HashSet中,如果在,则说明有重复数字,返回false;如果数字不是’.'且不在HashSet中,则将该数字添加到HashSet中。
- 检查每一行是否有重复数字,可以通过遍历每一行并使用HashSet来判断。
- 检查每一列是否有重复数字,可以通过遍历每一列并使用HashSet来判断。
- 检查每一个宫格是否有重复数字,可以将9x9数独划分为9个3x3的宫格,对于每个宫格,使用HashSet来判断是否有重复数字。
- 如果所有的检查都通过,则返回true;否则,返回false。
三、编程语言:
java
四、正确代码:
import java.util.*; public class Solution { public boolean isValidTwilightSudoku(char[][] board) { // 检查每一行 for (int i = 0; i < 9; i++) { if (!isValidRow(board, i)) { return false; } } // 检查每一列 for (int j = 0; j < 9; j++) { if (!isValidColumn(board, j)) { return false; } } // 检查每一个宫格 for (int i = 0; i < 9; i += 3) { for (int j = 0; j < 9; j += 3) { if (!isValidGrid(board, i, j)) { return false; } } } return true; } // 检查每一行是否有重复数字 private boolean isValidRow(char[][] board, int row) { Set<Character> set = new HashSet<>(); for (int i = 0; i < 9; i++) { char num = board[row][i]; if (num != '.' && !set.add(num)) { return false; } } return true; } // 检查每一列是否有重复数字 private boolean isValidColumn(char[][] board, int col) { Set<Character> set = new HashSet<>(); for (int i = 0; i < 9; i++) { char num = board[i][col]; if (num != '.' && !set.add(num)) { return false; } } return true; } // 检查每一个宫格是否有重复数字 private boolean isValidGrid(char[][] board, int row, int col) { Set<Character> set = new HashSet<>(); for (int i = row; i < row + 3; i++) { for (int j = col; j < col + 3; j++) { char num = board[i][j]; if (num != '.' && !set.add(num)) { return false; } } } return true; } }