Leetcode面试经典150题-36.有效数独

解法都在代码里,不懂就留言或者私信,比第一题稍微难点

java 复制代码
class Solution {
    public static boolean isValidSudoku(char[][] board) {
        /**rowExists[i][j]代表第i行是否存在数据j+1*/
        boolean[][] rowExists = new boolean[9][9];
        /**rowExists[i][j]代表第i列是否存在数据j+1*/
        boolean[][] colExists = new boolean[9][9];
        /**rowExists[i][j]代表第i个格子是否存在数据j+1*/
        boolean[][] bucketExists = new boolean[9][9];
        for(int i = 0; i < board.length; i++) {
            for(int j = 0; j < board[i].length; j++) {
                if(board[i][j] == '.') {
                    continue;
                }
                /**如果这个行已经存在这个数字了,返回false*/
                if(rowExists[i][board[i][j] - '1']) {
                    return false;
                }
                /**如果原来没有,现在这个数就是,有了记录一下*/
                rowExists[i][board[i][j]-'1'] = true;
                /**如果这个列已经存在这个数字了,返回false*/
                if(colExists[j][board[i][j]-'1']) {
                    return false;
                }
                /**如果原来没有,现在这个数就是,有了记录一下*/
                colExists[j][board[i][j]-'1'] = true;
                /**计算当前应该在哪个桶,这里注意bucketnum的计算*/
                int bucketNum = j / 3 + (i / 3)*3;
                if(bucketExists[bucketNum][board[i][j]-'1']) {
                    return false;
                }
                bucketExists[bucketNum][board[i][j]-'1'] = true;
            }
        }
        return true;
    }
}

运行结果

相关推荐
可观测性用观测云9 分钟前
云原生架构下微服务接入 SkyWalking 最佳实践
java
Python算法实战19 分钟前
腾讯送命题:手写多头注意力机制。。。
人工智能·算法·面试·大模型·强化学习
讨厌吃蛋黄酥23 分钟前
🔥 JavaScript异步之谜:单线程如何实现“同时”做多件事?99%的人都理解错了!
前端·javascript·面试
十八岁讨厌编程1 小时前
【算法训练营 · 补充】LeetCode Hot100(上)
算法·leetcode
_殊途1 小时前
项目开发手册-开发流程
java
渣哥1 小时前
Spring Boot 本质揭秘:约定优于配置 + 自动装配
javascript·后端·面试
想要AC的sjh1 小时前
华为Java专业级科目一通过心得
java·开发语言·华为
浮灯Foden1 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
青鱼入云2 小时前
Java 11对集合类做了哪些增强?
java
地方地方2 小时前
手写 AJAX 与封装 MyAxios:深入理解前端网络请求
前端·javascript·面试