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

运行结果

相关推荐
折哥的程序人生 · 物流技术专研1 天前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
一条泥憨鱼1 天前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【78】沙箱(Sandbox)
java·人工智能·spring
程序员二叉1 天前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
周航宇JoeZhou1 天前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC1 天前
Web Components主题热切换方案揭秘
java·前端
慕木沐1 天前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
想吃火锅10051 天前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
焦虑的说说1 天前
秒杀系统设计方案
java
许彰午1 天前
30_Java Stream流操作全解
java·windows·python