java练习(49)

ps:题目来自力扣

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
  4. 注意:

  5. 一个有效的数独(部分已被填充)不一定是可解的。
  6. 只需要根据以上规则,验证已经填入的数字是否有效即可。
  7. 空白格用 '.' 表示。
    class Solution {
        public boolean isValidSudoku(char[][] board) {
            // 检查每一行
            for (int i = 0; i < 9; i++) {
                boolean[] used = new boolean[9];
                for (int j = 0; j < 9; j++) {
                    if (board[i][j] != '.') {
                        int num = board[i][j] - '1';
                        if (used[num]) {
                            return false;
                        }
                        used[num] = true;
                    }
                }
            }
    
            // 检查每一列
            for (int j = 0; j < 9; j++) {
                boolean[] used = new boolean[9];
                for (int i = 0; i < 9; i++) {
                    if (board[i][j] != '.') {
                        int num = board[i][j] - '1';
                        if (used[num]) {
                            return false;
                        }
                        used[num] = true;
                    }
                }
            }
    
            // 检查每一个 3x3 宫
            for (int blockRow = 0; blockRow < 3; blockRow++) {
                for (int blockCol = 0; blockCol < 3; blockCol++) {
                    boolean[] used = new boolean[9];
                    for (int i = blockRow * 3; i < blockRow * 3 + 3; i++) {
                        for (int j = blockCol * 3; j < blockCol * 3 + 3; j++) {
                            if (board[i][j] != '.') {
                                int num = board[i][j] - '1';
                                if (used[num]) {
                                    return false;
                                }
                                used[num] = true;
                            }
                        }
                    }
                }
            }
    
            return true;
        }
    }

    代码解释

     

    本题要求判断一个 9x9 的数独是否有效,需要分别检查每一行、每一列以及每一个 3x3 宫是否满足数字 1 - 9 只出现一次的规则。

    具体步骤

  8. 检查每一行

    • 使用一个 for 循环遍历每一行,对于每一行,创建一个长度为 9 的布尔数组 used,用于标记数字 1 - 9 是否已经出现过。
    • 再使用一个嵌套的 for 循环遍历该行的每一个元素,如果该元素不是 .(表示未填数字),将其转换为对应的数字索引 num(通过减去字符 '1')。
    • 检查 used[num] 是否为 true,如果是,则说明该数字已经在该行出现过,返回 false;否则,将 used[num] 标记为 true
  9. 检查每一列

    • 同样使用一个 for 循环遍历每一列,对于每一列,创建一个新的布尔数组 used
    • 使用嵌套的 for 循环遍历该列的每一个元素,按照与检查行相同的方式进行数字检查。
  10. 检查每一个 3x3 宫

    • 使用两层嵌套的 for 循环遍历每一个 3x3 宫,外层循环控制宫的行索引 blockRow,内层循环控制宫的列索引 blockCol
    • 对于每一个 3x3 宫,创建一个布尔数组 used
    • 使用两层嵌套的 for 循环遍历该 3x3 宫内的每一个元素,同样进行数字检查。
  11. 返回结果

    • 如果以上所有检查都通过,说明数独有效,返回 true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值