LeetCode--37. 解数独(回溯算法) 37. 解数独题目描述编写一个程序通过填充空格来解决数独问题。数独的解法需遵循如下规则数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。请参考示例图数独部分空格内已填入了数字空白格用.表示。示例 1输入board [[5,3,.,.,7,.,.,.,.],[6,.,.,1,9,5,.,.,.],[.,9,8,.,.,.,.,6,.],[8,.,.,.,6,.,.,.,3],[4,.,.,8,.,3,.,.,1],[7,.,.,.,2,.,.,.,6],[.,6,.,.,.,.,2,8,.],[.,.,.,4,1,9,.,.,5],[.,.,.,.,8,.,.,7,9]] 输出[[5,3,4,6,7,8,9,1,2],[6,7,2,1,9,5,3,4,8],[1,9,8,3,4,2,5,6,7],[8,5,9,7,6,1,4,2,3],[4,2,6,8,5,3,7,9,1],[7,1,3,9,2,4,8,5,6],[9,6,1,5,3,7,2,8,4],[2,8,7,4,1,9,6,3,5],[3,4,5,2,8,6,1,7,9]] 解释输入的数独如上图所示唯一有效的解决方案如下所示提示board.length 9board[i].length 9board[i][j]是一位数字或者.题目数据保证输入数独仅有一个解代码classSolution{/** * 判断当前位置填入数字 k 是否合法 * * param row 当前行 * param column 当前列 * param k 当前尝试填入的数字 * param board 当前数独棋盘 */publicbooleanisValid(introw,intcolumn,chark,char[][]board){/** * 检查同行、同列 * * 数独规则 * 同一行、同一列不能出现重复数字 */for(inti0;i9;i){// 同行存在重复if(board[row][i]k){returnfalse;}// 同列存在重复if(board[i][column]k){returnfalse;}}/** * 检查 3 × 3 九宫格 */// 当前九宫格左上角坐标introwStartrow/3*3;intcolumnStartcolumn/3*3;// 遍历当前九宫格for(intirowStart;irowStart3;i){for(intjcolumnStart;jcolumnStart3;j){// 九宫格中存在重复数字if(board[i][j]k){returnfalse;}}}// 当前位置合法returntrue;}/** * 回溯函数 * * 返回值 * true - 找到正确解 * false - 当前路径失败 */publicbooleanbacktracking(char[][]board){/** * 遍历整个棋盘 */for(inti0;i9;i){for(intj0;j9;j){/** * 找到空格 */if(board[i][j].){/** * 尝试填入 1 ~ 9 */for(chark1;k9;k){/** * 如果当前数字合法 */if(isValid(i,j,k,board)){// 做选择填入数字board[i][j]k;// 递归下一层booleanresultbacktracking(board);/** * 如果后续成功 * 直接返回 true */if(resulttrue){returntrue;}/** * 回溯 * 当前数字不行恢复为空格 */board[i][j].;}}/** * 1~9 都尝试失败 * * 说明当前路径无解 */returnfalse;}}}/** * 没有找到空格 * * 说明整个棋盘已经填完 * 找到正确答案 */returntrue;}publicvoidsolveSudoku(char[][]board){// 启动回溯backtracking(board);}}

相关新闻

最新新闻

Android软键盘输入处理技巧

Android软键盘输入处理技巧

今天我们来讨论一下Android中监听软键盘输入的使用方式。它允许用户输入文本和执行其他操作。但是,有时候我们需要在用户输入文本时进行一些特殊的处理,比如实时验证输入内容、限制输入字符的类型等。因此,了解如何监听软键盘输入是非常重要的…

2026/8/27 12:58:11
单片机毕业设计-基于 STM32 单片机的水环境参数采集与阈值报警系统设计 基于 STM32 的便携式水质监测控制器设计与实现(011005)

单片机毕业设计-基于 STM32 单片机的水环境参数采集与阈值报警系统设计 基于 STM32 的便携式水质监测控制器设计与实现(011005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/27 12:58:11
Android开发一年失业两次,还有救吗?

Android开发一年失业两次,还有救吗?

前言 今天我面试了一个人!39岁,来自360的Android开发工程师,聊了以后一个感觉就是除了年龄大,其他方面都能完全胜任,而且工资要求也不是很高,说实在的,他的姿态已经很低了。后面闲聊了一下&…

2026/8/27 12:58:11
深入理解 Android Window系统

深入理解 Android Window系统

Android中的窗口系统是应用程序用户界面的核心组件之一,它负责管理可视化区域、处理用户输入事件以及与系统UI交互。本文将深入介绍与Android窗口系统相关的重要概念,包括不同类型的窗口、创建窗口、窗口的特性和标志、生命周期以及如何创建自定义窗口。…

2026/8/27 12:58:11
鸿蒙开发 入门

鸿蒙开发 入门

华为鸿蒙系统(英文:huaweiHarmonyOS,HongmengOS)。在2019年8月9日,华为在东莞举行华为开发者大会,正式发布操作系统鸿蒙OS,该版本是1.0。不知不觉现在已经是2023年中了,HarmonyOS的版本也更新到…

2026/8/27 12:58:11
Android入门教程 | ImageView 图片显示

Android入门教程 | ImageView 图片显示

为了让App界面更美观生动,我们可以放上图片。 显示图片是“刚需”。不论是书籍,报纸,网站,都有显示图片的需求。毕竟“无图无真相”。 在 Android 应用开发中,我们通常使用 ImageView 来显示图片。 ImageView的主要属性…

2026/8/27 12:53:11