Leetcode面试经典150题-36-有效数独升级版-37.解数独

news2024/11/15 2:01:51

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

public static void solveSudoku(char[][] board) {
        /**定义三个二维数组分别代表行、列、桶(每9个格子)*/
        boolean[][] rowExists = new boolean[9][10];
        boolean[][] colExists = new boolean[9][10];
        boolean[][] bucketExists = new boolean[9][10];
        /**根据原始board初始化三个是否存在的二维数组*/
        initArrays(board, rowExists, colExists, bucketExists);
        process(board, rowExists, colExists, bucketExists, 0, 0);
    }

    private static boolean process(char[][] board, boolean[][] rowExists, boolean[][] colExists, boolean[][] bucketExists, int curRow, int curCol) {
        /**我们是按照行从下到上填的,一行填完才填下一行,如果行越界了,说明正常范围内的行都填完了*/
        if(curRow == 9) {
            return true;
        }
        /**如果当前的位置可以填,那下个位置填啥,nextRow和nextCol表示下个要填的位置的行和列*/
        int nextRow = curCol == 8? curRow + 1 : curRow;
        int nextCol = curCol == 8? 0 : curCol + 1;
        /**当前位置填过了就继续填下一个*/
        if(board[curRow][curCol] != '.') {
            return process(board, rowExists, colExists, bucketExists, nextRow, nextCol);
        } else {
            /**当前位置可以填就填,那我们填哪些呢?所有的目前符合的(行列桶都不违规)都可以试试*/
            for(char c = '1'; c <= '9'; c++) {
                int num = c - '0';
                int bucketNum = (curRow/3) * 3 + curCol / 3;
                /**行、列、桶任意一个存在就不能填*/
                if(rowExists[curRow][num] || colExists[curCol][num] || bucketExists[bucketNum][num]) {
                    continue;
                }
                board[curRow][curCol] = c;
                /**填完之后行、列、桶做标记*/
                rowExists[curRow][num] = true;
                colExists[curCol][num] = true;
                bucketExists[bucketNum][num] = true;
                /**如果后面的过程尝试正确就直接返回,否则不处理*/
                if(process(board, rowExists, colExists, bucketExists, nextRow, nextCol)) {
                    return true;
                }
                /**不成功一定要恢复现场*/
                board[curRow][curCol] = '.';
                rowExists[curRow][num] = false;
                colExists[curCol][num] = false;
                bucketExists[bucketNum][num] = false;

            }
        }
        /**如果中间过程都没有返回,返回false*/
        return false;
    }

    /**遍历board初始化是否存在的数组*/
    private static void initArrays(char[][] board, boolean[][] rowExists, boolean[][] colExists, boolean[][] bucketExists) {
        for(int i = 0; i < board.length; i++) {
            for(int j = 0; j < board[i].length; j++) {
                if(board[i][j] == '.') {
                    continue;
                }
                int num = board[i][j] - '0';
                int bucketNum = (i / 3) * 3 + j / 3;
                rowExists[i][num] = true;
                colExists[j][num] = true;
                bucketExists[bucketNum][num] = true;
            }
        }
    }

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不用U盘重装win10/11

创建适用于 Windows 的安装介质 Windows 10 Windows 8.1 Windows 7 Microsoft 365 免费试用版正在等待你使用 立即解锁 你可以使用安装介质&#xff08;U 盘或 DVD&#xff09;来安装 Windows 的新副本、执行全新安装或重新安装 Windows。 要创建安装介质&#xff0c;请转到…

街机 CAPCOM CPS2 中英文名字与驱动对照表

Part.I 简介 本文列举了街机 CPS2 中游戏的中英文名字与其驱动的对照&#xff0c;以帮助诸位更快地找到自己想玩的游戏。 注意&#xff1a;汉化版的街机模拟器 Kawaks 中游戏的中文名字是根据英文直译的&#xff0c;并不是习惯性的中文叫法。比如『三国志』英文名为『Warriors…

安全入门day.03

一、知识点 1、抓包技术应用意义 在渗透安全方面&#xff0c;通过抓包分析&#xff0c;安全人员可以模拟黑客的攻击行为&#xff0c;对系统进行渗透测试。这种测试有助于发现系统中存在的安全漏洞和弱点。一旦发现漏洞&#xff0c;可以立即采取措施进行修复&#xff0c;从而增…

Selenium实战技巧-多页面和Windows控件处理

01 多页面处理 做UI自动化的时候常常会遇到浏览器弹出新的Tab页&#xff0c;或者需要在多个网页服务之间来回取数据的情况。 比如在首页点击文章“Jmeter使用&#xff1f;”的链接&#xff0c;浏览器会弹出一个新的页面显示“Jmeter使用&#xff1f;”这篇文章的详情。此时如…

SpringBoot教程(二十七) | SpringBoot集成AOP实现异常处理

SpringBoot教程&#xff08;二十七&#xff09; | SpringBoot集成AOP实现异常处理 前言第一步&#xff1a;统一接口返回结果1. 统一封装结果包含如下参数2. 创建 枚举HttpStatusEnum&#xff08;返回结果代码&#xff09;3. 创建 ResponseResult &#xff08;返回实体类&#x…

如何使用vcftools提取特定的染色体

起源是由于bam文件没有过滤完全&#xff0c;导致calling出来的vcf文件还有线粒体中的染色体存在&#xff0c;因为在金标准文件中只有1-22号和X染色体&#xff0c;不包含线粒体和Y染色体&#xff0c;因为我使用的金标准文件是来自NA12878&#xff0c;是一位白种人女性。因此&…

VBA代码解决方案第十七讲:如何选择一个工作表,选择多个工作表

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

基于小程序的学习交流论坛的设计与实现(代码+教程)

我们将制作一个具备帖子分类、发帖、搜索、点赞回复、学习小组组建以及用户登录等功能的小程序。下面将详细阐述每个功能的实现方法&#xff0c;并提供一些关键代码片段作为参考。 需求 帖子分类&#xff1a;对用户发布的帖子分类到对应的专区&#xff08;寻人寻物&#xff0…

算法-最长连续序列

leetcode的题目链接 这道题的思路主要是要求在O&#xff08;n)的时间复杂度下&#xff0c;所以你暴力解决肯定不行&#xff0c;暴力至少两层for循环&#xff0c;所以要在O&#xff08;n)的时间复杂度下&#xff0c;你可以使用HashSet来存储数组&#xff0c;对于每个数字&#…

分页查询--条件查询

使用pagehelper插件 我们在pom.xml文件中加入下面的语句&#xff0c;可以使用插件&#xff0c;进行分页查询 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1…

最管用的能屏蔽WIndows10/11系统功能按键的工具--powerToys键盘管理器

最近在开发中碰到需要屏蔽系统按键功能的需求&#xff0c;原本以为是程序里屏蔽按键&#xff0c;结果&#xff0c;原来是需要屏蔽操作系统默认按键功能。 这样的话&#xff0c;就只能往注册表&#xff0c;脚本&#xff0c;全局钩子函数&#xff0c;以及一些第三方的什么工具之…

工业智能物联网关,智慧医疗生态圈的创新驱动

项目背景 智慧化数字医疗正在推动医疗健康领域的转型&#xff0c;预计到2024年&#xff0c;全球数字医疗市场规模将达到3656.7亿美元&#xff0c;中国市场规模将增至4130亿元人民币&#xff0c;随着技术的持续创新和市场需求的不断增长&#xff0c;这一领域的需求和潜力将持续扩…

24最新Stable Diffusion入门指南(看完必会)超全面

前言 今天写这个帖子是带大家了解一款强大的 AI 绘画工具——Stable Diffusion&#xff0c;可以帮你解决很多应用层面的[AI控图]问题。 关于 Stable Diffusion 的内容很多&#xff0c;在本篇教程里&#xff0c;我会先为你介绍 Stable Diffusion 模型的运行原理、发展历程和相…

探索离线AI知识库的技术突破:AntSKPro AI 离线知识库一体机

在当今数字化时代&#xff0c;离线AI解决方案变得越来越重要&#xff0c;特别是在网络连接不稳定或不可用的情况下。最近&#xff0c;我有幸接触到一款名为AntSKPro AI 离线知识库一体机的设备&#xff0c;它展示了在离线环境下如何实现强大的AI支持。下面我将分享一些关于这款…

Ajax_00000

contents Ajax介绍 AJAX(Asynchronous JavaScript And XML)。 XML简介 XML&#xff1a;可扩展标记语言。 XML被设计用来传输和存储数据。 XML和HTML类似&#xff0c;不同的是HTML中都是预定义标签&#xff0c;而XML中没有预定义标签&#xff0c;全都是自定义标签&#xff0…

在损坏的驱动器上安全使用数据恢复软件的最佳方法

大量的存储使用和突然的物理损坏可能会使我们最可靠的硬盘驱动器变成最顽固的电子废料。作为一个因丢失数据而经历过几次恐慌发作的人&#xff0c;我发现使用像奇客数据恢复这样的数据恢复软件可以创造奇迹。该软件一直被证明是有用和有效的&#xff0c;即使在处理严重损坏的驱…

性能工具之 JMeter ajax 简单登录案例实战

文章目录 一、前言二、前置工作三、登陆密码分析四、JMeter脚本开发四、登陆性能分析五、小结 一、前言 想起论语中的 “学而时习之不亦说乎” &#xff0c;也想找个开源项目实战一把&#xff0c;下面用一个开源ERP系统中的登陆做今天的实战。 二、前置工作 开源ERP项目地址…

librttopo-1.1.0源码编译全过程(Visual Studio2017)

一、源码下载 可以自行搜索下载&#xff0c;可以根据本文提供的链接进行便捷下载&#xff1a;点击下载1&#xff0c;点击下载2 二、Windows下编译 下载完源代码后&#xff0c;进行源码解压&#xff0c;进入源码解压目录后&#xff0c;可以看到源码组织结构如下所示&#xff0c;…

柯桥外语培训|提建议该用would you还是you should?这些经典句型要记清!

不同场合&#xff0c;不同的人&#xff0c;提出建议的方式都不一样&#xff01;如何正确提建议呢&#xff1f;来看看下面的经典句型&#xff0c;保证万无一失~ Use the question 使用问题给建议 01 May I suggest 我可以建议……吗&#xff1f; A: I am so frustrated with th…

常见硬件工程师面试题(五)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…