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;
    }
}

运行结果

相关推荐
皮皮林5514 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河4 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程7 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅8 小时前
Java面向对象入门(类与对象,新手秒懂)
java
Lee川9 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
初次攀爬者9 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺9 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart11 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP12 小时前
MyBatis-mybatis入门与增删改查
java