一、知识点:
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;
}
}

京公网安备 11010502036488号