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

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

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.mzph.cn/bicheng/52963.shtml

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

相关文章

穿越Java世界的继承奇旅:从基类到子类的华丽蜕变

1.为什么要继承 2.什么是继承以及继承的方式 3.继承的一些语法 4.父类成员的访问 5.关键字super 6.关键字protected 7.关键字final 8.继承与组合 一&#xff1a;为什么要继承 ①代码重用&#xff1a;继承允许我们重用、扩展或修改父类的属性和方法&#xff0c;而无需重…

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题

【linxu】虚拟环境中Python 版本错乱&#xff1a;深入探究 Linux 虚拟环境的识别问题 问题描述&#xff1a;在服务器上&#xff0c;我配置了一个虚拟环境&#xff0c;明确指定使用 Python 3.8 版本。然而&#xff0c;当我激活该环境并检查 Python 版本时&#xff0c;意外地发现…

Golang中的timer和ticker

Golang中的timer和ticker Timer func AppTimer() {// st : time.Now()// // 创建timer&#xff0c;定时2s// timer : time.NewTimer(2 * time.Second)// timer.Stop()// //<-timer.C// timer.Reset(3 * time.Second)// <-timer.C// fmt.Println(time.Since(st))// Afte…

21. Map接口中keySet()、values()和entrySet()方法的区别是什么?它们各自返回什么内容?

在Java中&#xff0c;Map接口提供了keySet()、values()和entrySet()方法&#xff0c;这些方法用于访问Map中的不同部分。下面详细介绍它们的区别以及它们各自返回的内容。 1. keySet() 方法 作用: keySet()方法返回Map中所有键&#xff08;Key&#xff09;的集合。 返回类型: …

OSI七层模型中的数据链路层

图片&#xff1a;数据帧的格式 这里面的一个关键点是&#xff0c;数据的源IP和目标IP在哪里&#xff1f; 就在图中的“数据”里面&#xff0c;这个“数据”也就是网络层的数据包&#xff0c;如果是TCP类型的数据包&#xff0c;数据包里面就包含TCP类型的首部信息&#xff0c;…

实测数据处理(RD算法处理)——SAR成像算法系列(十)

系列文章目录 《SAR学习笔记-SAR成像算法系列&#xff08;一&#xff09;》 《距离多普勒算法&#xff08;RDA&#xff09;-SAR成像算法系列&#xff08;三&#xff09;》 文章目录 一、算法流程 1.1、回波信号生成 1.2、 距离脉冲压缩 1.3、距离徙动校正 1.4、方位脉冲压缩 …

midwayjs 框架使用 rabbitmq 消息延迟

插件rabbitmq_delayed_message_exchange是RabbitMQ官方提供的一种用于实现延迟消息的解决方案。该插件将交换机类型扩展至x-delayed-message&#xff0c;这种类型的交换机能够将消息暂时挂起&#xff0c;直到设定的延迟时间到达&#xff0c;才将消息投递到绑定的队列中。这一特…

代理 IP 在工业物联网中的大作用

随着科技的飞速发展&#xff0c;工业物联网&#xff08;IIoT&#xff09;已经成为现代工业的重要组成部分&#xff0c;它通过将各种物理设备、传感器、控制系统等通过互联网连接起来&#xff0c;实现了工业生产的智能化、自动化和远程监控。而在这个庞大的网络体系中&#xff0…

掌握CHECK约束:确保数据准确性的关键技巧

掌握CHECK约束&#xff1a;确保数据准确性的关键技巧 在数据库设计和管理中&#xff0c;数据的准确性和完整性至关重要。CHECK约束是SQL中一种强大的工具&#xff0c;用于限制列中的数据值&#xff0c;确保它们满足特定的条件。本文将详细介绍如何使用CHECK约束&#xff0c;并…

湖南师范大学教育科学学报

期刊名称&#xff1a; 湖南师范大学教育科学学报 国内统一刊号(CN)&#xff1a; 42-94 国际标准刊号(ISSN)&#xff1a;BM1712 刊物设有两大特色专题“古典教育”和“教科书研究”&#xff0c;常设“教育基本理论研究”、“教育哲学研究”、“教师教育研究”、“高等教育研究”…

Nginx跨域问题解决

背景&#xff1a;云服务器上面部署了后端和前端&#xff0c;前端开发在本地启一个web访问页面&#xff0c;然后访问云服务的后端&#xff0c;然后出现问题 问题&#xff1a;Access to XMLHttpRequest at ‘http://192.168.10.100:8070/auth/login’ from origin ‘http://loca…

[E二叉树] lc104. 二叉树的最大深度(dfs+自顶向下)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;104. 二叉树的最大深度 题单&#xff1a; 链表、二叉树与一般树&#xff08;前后指针/快慢指针/DFS/BFS/直径/LCA&#xff09; 2.2 自顶向下 DFS 2. 题目解析 思路&#xff1a; 很基础的 dfs 题目哈&#x…

k8s单master多node环境搭建-k8s版本低于1.24,容器运行时为docker

k8s 1.20.6单master多node环境搭建 1.环境规划2.初始化服务器1&#xff09;配置主机名2&#xff09;设置IP为静态IP3&#xff09;关闭selinux4&#xff09;配置主机hosts文件5&#xff09;配置三台主机之间免密登录6&#xff09;关闭交换分区swap&#xff0c;提升性能7&#xf…

github源码指引:C++嵌入式WEB服务器

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 相关专题&#xff1a; C嵌入式…

基于Spring Boot的文字识别系统

前端使用htmlcssjs&#xff0c;后端使用Spring Boot&#xff0c;数据库使用mysql&#xff0c;识别算法有两个&#xff0c;一个是使用百度OCR接口&#xff0c;一个是自己写一个python&#xff0c;用flask包装。 其中百度OCR接口可以去免费申请&#xff0c;然后把appid、apikey、…

Netty 知识目录

Netty 知识结构Netty Bootstrap/ServerBootstrapNetty EventLoopGroup/EventLoopNetty ChannelNetty ChannelPipeline/ChannelHandlerNetty ByteBufNetty TCPNetty UDPNetty HTTPNetty WebsocketNetty SSL/TLS

【王树森】Transformer模型(1/2): 剥离RNN,保留Attention(个人向笔记)

Transformer简介 Transformer 是一个Seq2Seq模型Tramsformer 不是RNNTransfomer 只有attention和全连接层机器翻译在大型数据集上完爆最好的RNN Review Attention for RNN 这节课讲的attention相对比于前两节课多了一个 v i v_i vi​&#xff0c;之前是用权重直接乘 h h h&…

【GD32】从零开始学GD32单片机 | USB通用串行总线接口+HID键盘例程(GD32F470ZGT6)

1. 简介 USB&#xff0c;全称通用串行总线&#xff0c;相信大家都非常熟悉了&#xff0c;日常生活只要用到手机电脑都离不开这个接口&#xff0c;像鼠标键盘U盘都需要使用这个接口进行数据传输&#xff0c;下面简单介绍一下。 1.1 版本标准 USB的标准总体可以分为低速、全速和…

业务资源管理模式语言02

图1 模式间的依赖关系 第一节&#xff1a;最开始&#xff0c;关注应用中包括的资源。首先&#xff0c;必须标识资源&#xff08;1&#xff09;&#xff0c;下一步&#xff0c;检查资源限定&#xff08;2&#xff09;&#xff0c;同时量化资源&#xff08;3&#xff09; 模式1…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题&#xff1f; 事件和委托可以说是息息相关。 前面先解释了什么是委托&#xff0c;怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位&#xff0c;尤其是接触了winform软件开发的同学们应该都知…