当前位置: 首页 > news >正文

LeetCode--37. 解数独(回溯算法)

37. 解数独

题目描述

编写一个程序,通过填充空格来解决数独问题。

数独的解法需遵循如下规则

  1. 数字1-9在每一行只能出现一次。
  2. 数字1-9在每一列只能出现一次。
  3. 数字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 == 9
  • board[i].length == 9
  • board[i][j]是一位数字或者'.'
  • 题目数据保证输入数独仅有一个解

代码

classSolution{/** * 判断当前位置填入数字 k 是否合法 * * @param row 当前行 * @param column 当前列 * @param k 当前尝试填入的数字 * @param board 当前数独棋盘 */publicbooleanisValid(introw,intcolumn,chark,char[][]board){/** * 检查同行、同列 * * 数独规则: * 同一行、同一列不能出现重复数字 */for(inti=0;i<9;i++){// 同行存在重复if(board[row][i]==k){returnfalse;}// 同列存在重复if(board[i][column]==k){returnfalse;}}/** * 检查 3 × 3 九宫格 */// 当前九宫格左上角坐标introwStart=row/3*3;intcolumnStart=column/3*3;// 遍历当前九宫格for(inti=rowStart;i<rowStart+3;i++){for(intj=columnStart;j<columnStart+3;j++){// 九宫格中存在重复数字if(board[i][j]==k){returnfalse;}}}// 当前位置合法returntrue;}/** * 回溯函数 * * 返回值: * true -> 找到正确解 * false -> 当前路径失败 */publicbooleanbacktracking(char[][]board){/** * 遍历整个棋盘 */for(inti=0;i<9;i++){for(intj=0;j<9;j++){/** * 找到空格 */if(board[i][j]=='.'){/** * 尝试填入 1 ~ 9 */for(chark='1';k<='9';k++){/** * 如果当前数字合法 */if(isValid(i,j,k,board)){// 做选择:填入数字board[i][j]=k;// 递归下一层booleanresult=backtracking(board);/** * 如果后续成功, * 直接返回 true */if(result==true){returntrue;}/** * 回溯: * 当前数字不行,恢复为空格 */board[i][j]='.';}}/** * 1~9 都尝试失败 * * 说明当前路径无解 */returnfalse;}}}/** * 没有找到空格 * * 说明整个棋盘已经填完 * 找到正确答案 */returntrue;}publicvoidsolveSudoku(char[][]board){// 启动回溯backtracking(board);}}
http://www.jsqmd.com/news/1169694/

相关文章:

  • STM32G431RB与TLA2518 ADC的高精度信号采集方案
  • Python shade-python-sdk 包详解:功能、安装、语法与实战案例
  • PID控制算法C语言实现:3种结构体封装对比与性能实测(附完整代码)
  • 编程助手真实体验测评:6大模型在开发工作流中的手感对比
  • NBM5100A纽扣电池增强方案与PIC18F86J11集成设计
  • 2026 年上半年中国前沿科技赛道融资爆发,量子与核聚变成资本宠儿!
  • AI时代下如何防DDoS? 2026年DDoS攻击趋势报告深度解读
  • 如何让老款Mac重获新生:OpenCore Legacy Patcher终极使用指南
  • 西门子HMI精智面板安全实践:2种自动登录方案的风险对比与权限管理
  • 别再只当聊天软件了!2026,全面爆发的AIAgent正在悄悄砸掉谁的饭碗?
  • 告别龟速下载!9大网盘直链解析神器LinkSwift深度体验指南
  • 郯城城东宴席门店测评 升学寿宴大包间定制服务优选 - 资讯快报
  • Unity集成AndroidX完整指南:解决依赖冲突与AAR模块开发
  • 上海小众宴席宝藏店测评!吴记小菜无预制菜家常烟火气出圈 - 资讯快报
  • 从NCM到MP3:3步解锁你的网易云音乐收藏
  • 静态时序分析(STA)时序弧建模:3类单调性(正/负/非)的数学推导与电路实例
  • CCNA 200-301 备考:从34道真题解析3大核心协议与2类配置陷阱
  • TypeScript:为大型 JavaScript 应用添可选类型系统,多途径邀你参与贡献!
  • 郯城东城小区宴席店测评 无隐形消费免费布置聚餐优选 - 资讯快报
  • Python greeting-module 包完全指南:功能、安装、语法与实战案例
  • MySQL DDL表操作全套教程:建表、数据类型、表修改删除实操指南
  • 超大规模AI实验室算力需求估算模型与成本分析
  • 大模型公司盈利曙光:Anthropic半年ARR增6倍,季度利润将超10亿!
  • 高精度信号采集系统设计与实现:ADS8665与PIC18F57Q43应用
  • Agent Harness 与操作系统(OS)的高度类比 II:一份深度研究报告 / by DeepThink
  • CentOS 7.9 修复 CVE-2023-38408:OpenSSH 9.3p2 源码升级 3 大避坑点与 PAM 配置
  • 企业AI应用实战:从技术选型到工作流程重构的完整指南
  • SAP PS 网络成本计划实战:3种活动类型(内部/外部/服务)配置与成本核算变式详解
  • 体育数据API哪家强?纳米数据覆盖18+项目,助力开发者快速接入
  • 2026大庆装饰公司推荐,老房翻修,二手房改造,装饰设计,全包,装修公司优选指南!