leetcode37. 解数独(hashmap+回溯)

编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 ‘.’ 表示。
Note:
给定的数独序列只包含数字 1-9 和字符 ‘.’ 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

代码

class Solution {Map<Integer,HashSet<Integer>> col=new HashMap<>();//记录行Map<Integer,HashSet<Integer>> row=new HashMap<>();//记录列Map<Integer,Map<Integer,HashSet<Integer>> >map3=new HashMap<>();//记录3x3public void solveSudoku(char[][] board) {int n=board.length,m=board[0].length;for(int i=0;i<n;i++)row.put(i,new HashSet<>());for(int j=0;j<m;j++)col.put(j,new HashSet<>());for(int i=0;i<3;i++){map3.put(i,new HashMap<>());for(int j=0;j<3;j++)map3.get(i).put(j,new HashSet<>());}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(Character.isDigit(board[i][j]))//将已经填好的数据存进hashmap{col.get(j).add(board[i][j]-'0');row.get(i).add(board[i][j]-'0');map3.get(i/3).get(j/3).add(board[i][j]-'0');}getSolveSudoku(board,0);}public boolean getSolveSudoku(char[][] board,int loc) {if(loc==81) return true;int i=loc/9,j=loc%9;if(Character.isDigit(board[i][j])) {return getSolveSudoku(board, loc+1);}else {for(int k=1;k<10;k++)//遍历所有可能的情况{if(col.get(j).contains(k)||row.get(i).contains(k)|| map3.get(i/3).get(j/3).contains(k)) continue;//当前数字不满足col.get(j).add(k);row.get(i).add(k);map3.get(i/3).get(j/3).add(k);board[i][j]=(char) (k+'0');if(getSolveSudoku(board, loc+1)) return true;board[i][j]='.';col.get(j).remove(k);//回溯map3.get(i/3).get(j/3).remove(k);row.get(i).remove(k);}return false;}}
}

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

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

相关文章

malloc、calloc、realloc和alloca各种的区别

需要先包含头文件 #include"malloc.h"malloc是标准的在堆中开辟新的空间比如char *pt(char *)malloc(10*sizeof(char));需要free(p)才会释放空间calloc也是开辟空间&#xff0c;但是使用方式不一样比如char *pt(char *)calloc(100, sizeof(char));然后用calloc开辟的…

如何对第一个Vue.js组件进行单元测试

by Sarah Dayan通过莎拉达扬 In Build Your First Vue.js Component we made a star rating component. We’ve covered many fundamental concepts to help you create more complex Vue.js components.在“ 构建您的第一个Vue.js组件”中&#xff0c;我们制作了星级评分组件…

Asp.NetCoreWebApi - RESTful Api

REST 常用http动词 WebApi 在 Asp.NetCore 中的实现3.1. 创建WebApi项目.3.2. 集成Entity Framework Core操作Mysql 3.2.1. 安装相关的包(为Xxxx.Infrastructure项目安装)3.2.2. 建立Entity和Context3.2.3. ConfigureService中注入EF服务3.2.4. 迁移数据库3.2.5. 数据库迁移结果…

android动画影子效果,Android TV常用动画的效果,View选中变大且有阴影(手机也能用)...

因为电视屏幕比较大&#xff0c;而我们看电视时距离电视有一定距离&#xff0c;这样就需要动画效果比较明显&#xff0c;这个动画就是应用最广泛的&#xff0c;因为很酷&#xff0c;呵呵&#xff0c;你懂得&#xff0c;看了就知道。效果如下图&#xff1a;public class MainAct…

leetcode226. 翻转二叉树(dfs)

翻转一棵二叉树。示例&#xff1a;输入&#xff1a;4/ \2 7/ \ / \ 1 3 6 9 输出&#xff1a;4/ \7 2/ \ / \ 9 6 3 1代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode righ…

Java BigDecimal Rounding Mode

UP        往绝对值大了取 DOWN      往绝对值小了取 CEILING     往值大了取 FLOOR      往值小了取 HALF_UP     不管正负&#xff0c;四舍五入 HALF_DOWN  不管正负&#xff0c;五舍六入 HALF_EVEN    整数部分为奇数&#xff1a;四舍五入…

如何成为一名有效的软件工程师

by Luis Santiago路易斯圣地亚哥(Luis Santiago) 如何成为一名有效的软件工程师 (How to become an effective software engineer) When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on …

linux 高可用----keepalived+lvs

什么是高可用&#xff1f; HA&#xff08;high availability&#xff09;即高可用性&#xff1b;就是在高可用集群中发生单点故障时&#xff0c;能够自动转移资源并切换服务&#xff0c;以保证服务一直在线的机制。 LVS LVS&#xff1a;&#xff08;linux virtual server&#…

用户配置相关文件

用户配置相关文件小总结 /etc/passwd 记录用户相关的信息 /etc/shadow 密码影子文件 /etc/group 记录用户组相关的信息 /etc/gshadow 密码影子文件&#xff08;组密码&#xff09; /etc/passwd 文件中各段的内容 第1段&#xff1a;用户名 第…

华为5c android n风格,华为荣耀畅玩5C的屏幕怎么样

华为荣耀畅玩5C的屏幕怎么样屏幕方面&#xff0c;华为荣耀畅玩5C采用了5.2英寸1080P级别GFF贴合屏幕&#xff0c;塑料边框采用了弧面状的设计&#xff0c;握感比较舒适。华为荣耀畅玩5C采用了双主天线的设计&#xff0c;分别在上下的塑料区域。此外&#xff0c;边框以及后盖的上…

spring解析配置文件(三)

一、从XmlBeanDefinitionReader的registerBeanDefinitions&#xff08;doc,resource&#xff09;开始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …

leetcode968. 监控二叉树(dfs)

给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 输入&#xff1a;[0,0,null,0,0] 输出&#xff1a;1 解释&#xff1a;如图所示&#xff0c;一台摄像头足…

linux系统部署war包,查看tomcat日志

1.部署war包app/tomcat/bin在tomcat/bin 目录下启动 .startup.sh&#xff0c;在启动过程中tomcat会对war包进行解压&#xff0c;形成相应的项目目录 执行命令&#xff1a;./startup.sh 2.实时查看tomcat的日志。首先需要到tomcat的日志目录下。我的目录供你参考app/tomcat/logs…

代码编写工具_这些工具将帮助您编写简洁的代码

代码编写工具看一下Prettier&#xff0c;ESLint&#xff0c;Husky&#xff0c;Lint-Staged和EditorConfig (A look at Prettier, ESLint, Husky, Lint-Staged and EditorConfig) Learning to write good code, but you don’t know where to start… Going through style-guide…

使用kibana和elasticsearch日志实时绘制图表

前言&#xff1a; 此文接的是上篇&#xff0c;上次的内容是&#xff0c;用python操作elasticsearch存储&#xff0c;实现数据的插入和查询。 估计有些人一看我的标题&#xff0c;以为肯定是 logstash kibana elasticsearch的组合。这三个家伙也确实总是勾搭在一块。 其实logst…

android中设置菜单栏,android – 菜单项没有显示在操作栏

我做了一个全新的项目。我已经添加了项目到菜单布局文件。这些项目不会显示在操作栏的右侧。我记得一个有三个点的图标显示出来&#xff0c;打开菜单。这里是我的活动public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState)…

leetcode617. 合并二叉树(dfs)

给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节点将直接…

conda使用报错:ImportError:DLL load failed

conda安装python环境经常报&#xff1a; ImportError:DLL load failed 将环境变量加入path可以解决&#xff1a; D:\program\anaconda D:\program\anaconda\Scripts D:\program\anaconda\Library\bin 转载于:https://www.cnblogs.com/timlong/p/11122805.html

《程序员修炼之道》笔记(八)

第八章 注重实效的项目 随着你的项目开动&#xff0c;我们需要从个体的哲学和编码问题转向讨论更大的、项目级的问题。我们将不深入项目管理的具体细节&#xff0c;而是要讨论能使项目成功或失败的几个关键区域。 1. 注重实效的团队 书中前面的内容都是帮助个体成为更好的程序员…

android 网络调试 源代码,Android源代码调试环境搭建

我们在调试Android应用程序的时候&#xff0c;有时候遇到一些莫名其妙的问题&#xff0c;因此我们需要查看Android内部是如何调用的。我们都知道Android是一个伟大的开源项目&#xff0c;因此debug的时候肯定是支持源代码级别调试的。采用源代码调试&#xff0c;一方面有利于发…