题解 | #暮光数独验证#

暮光数独验证

https://www.nowcoder.com/practice/68dd2d15263f433db6ffa0405d08426a

一、知识点:

HashSet

二、文字分析:

  1. 根据数独规则,分别检查每一行、每一列和每一个宫格,判断是否出现了重复的数字。
  2. 创建一个HashSet集合,用于存储已经出现过的数字。
  3. 遍历整个数独,对于每个位置上的数字,执行以下步骤:如果数字不是’.',则判断该数字是否在HashSet中,如果在,则说明有重复数字,返回false;如果数字不是’.'且不在HashSet中,则将该数字添加到HashSet中。
  4. 检查每一行是否有重复数字,可以通过遍历每一行并使用HashSet来判断。
  5. 检查每一列是否有重复数字,可以通过遍历每一列并使用HashSet来判断。
  6. 检查每一个宫格是否有重复数字,可以将9x9数独划分为9个3x3的宫格,对于每个宫格,使用HashSet来判断是否有重复数字。
  7. 如果所有的检查都通过,则返回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;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务