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

安徽政府网站建设安卓优化大师历史版本

安徽政府网站建设,安卓优化大师历史版本,html5商城网站,想用自己电脑做服务器做个网站本文目录 1 中文题目2 求解方法:递归回溯法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只…

本文目录

  • 1 中文题目
  • 2 求解方法:递归+回溯法
    • 2.1 方法思路
    • 2.2 Python代码
    • 2.3 复杂度分析
  • 3 题目总结

1 中文题目

编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:

  • 数字 1-9 在每一行只能出现一次。
  • 数字 1-9 在每一列只能出现一次。
  • 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
  • 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。

示例:
在这里插入图片描述

输入: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] 是一位数字或者 ‘.
  • 题目数据 保证 输入数独仅有一个解

2 求解方法:递归+回溯法

2.1 方法思路

方法核心

使用回溯算法解决数独问题,使用三个二维数组记录数字使用情况,采用逐个位置填写的策略,通过位置编号简化行列索引计算。

实现步骤

(1)初始化阶段:

  • 创建三个二维数组记录每行、每列和每个3x3方块中数字的使用情况
  • 遍历数独板,标记已有数字的使用情况
  • 将问题转化为填写空位的问题

(2)回溯过程:

  • 使用位置编号(0-80)表示当前填写位置
  • 通过整除和取余计算行列索引
  • 如果当前位置已有数字,继续下一个位置。否则尝试填入1-9的数字

(3)验证过程:

  • 检查当前数字是否可以在行中使用,检查当前数字是否可以在列中使用,检查当前数字是否可以在3x3方块中使用
  • 所有检查都通过才能填入数字

方法示例

输入数独板示例:
[["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"]
]执行过程示例(以填写第一个空位为例):1. 定位第一个空位:- 位置 (0,2)- box_index = (0 // 3) * 3 + 2 // 3 = 02. 尝试填入数字:- 检查数字1:已在同行//方块使用- 检查数字2:已在同行//方块使用- 检查数字4:可以使用- 填入数字4并继续递归3. 如果后续填写失败:- 回溯到当前位置- 清除数字4- 尝试下一个可能的数字4. 递归和回溯过程继续,直到找到完整解答

2.2 Python代码

class Solution:def solveSudoku(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."""# 初始化三个二维数组,分别记录行、列和3x3方块中数字的使用情况rows = [[False] * 9 for _ in range(9)]cols = [[False] * 9 for _ in range(9)]boxes = [[False] * 9 for _ in range(9)]# 遍历整个数独板,记录已有数字的使用情况for i in range(9):for j in range(9):if board[i][j] != '.':num = int(board[i][j]) - 1  # 转换为0-8的索引box_index = (i // 3) * 3 + j // 3rows[i][num] = Truecols[j][num] = Trueboxes[box_index][num] = Truedef backtrack(pos: int) -> bool:# 如果已经填完所有位置,返回Trueif pos == 81:return True# 计算当前位置的行列索引row, col = pos // 9, pos % 9# 如果当前位置已有数字,尝试填写下一个位置if board[row][col] != '.':return backtrack(pos + 1)# 计算当前位置所在的3x3方块索引box_index = (row // 3) * 3 + col // 3# 尝试填入1-9的数字for num in range(9):# 检查当前数字是否可以填入if not (rows[row][num] or cols[col][num] or boxes[box_index][num]):# 标记数字使用情况rows[row][num] = cols[col][num] = boxes[box_index][num] = Trueboard[row][col] = str(num + 1)# 递归尝试填写下一个位置if backtrack(pos + 1):return True# 回溯:恢复标记和数独板rows[row][num] = cols[col][num] = boxes[box_index][num] = Falseboard[row][col] = '.'# 当前位置无法填入任何数字return False# 从第一个位置开始解数独backtrack(0)

2.3 复杂度分析

  • 时间复杂度:O(9^m),m是空格的数量
    • 每个空格最多尝试9个数字
    • 实际运行时间因剪枝而大大减少
  • 空间复杂度:O(m),m是空格的数量(递归栈深度)
    • 三个固定大小的二维数组(81个布尔值)

3 题目总结

题目难度:困难
数据结构:矩阵
应用算法:回溯、递归

http://www.dinnco.com/news/64628.html

相关文章:

  • 本人已履行网站备案信息大金seo
  • 南京网站设计平台搜索引擎seo如何赚钱
  • 福建省建设局实名制网站网络营销推广的方式
  • 网站部署到终端机怎么做推广软件app
  • 怎么做网站里的悬浮窗口可以搜索国外网站的搜索引擎
  • 旅游网的网站建设优质的seo网站排名优化软件
  • 杭州网站建设外包成都seo公司
  • 南宁建站官网南昌seo招聘信息
  • linux系统上的wordpressseo优化方案总结
  • 成都市建网站公司seo优化推广技巧
  • 商丘做网站哪家好seo服务如何收费
  • 上海简站商贸有限公司软文模板300字
  • 斗鱼类的直播网站开发营销宣传方式有哪些
  • 福安做网站最好seo网站关键词优化工具
  • 南宁软件优化网站建设营销策略有哪些方面
  • 做网站怎么排版护肤品营销策划方案
  • 免费开源网站系统有哪些线上拓客渠道有哪些
  • 自建个人网站平台长春seo结算
  • 怎么建设门户网站网站友情链接的好处
  • 沈阳做网站哪个好快速建站
  • b2b网站怎么发布信息网站设计说明
  • 做阀门网站电话seo网站关键词优化报价
  • 怎样用word2003做网站百度广告销售
  • 郑州旅游网站制作市场营销专业课程
  • 湖北省武汉市东西湖建设局网站手游推广加盟
  • 邯郸企业做网站报价广告关键词有哪些类型
  • 网站开发专业大学网站推广工具有哪些
  • 国内网站建设发展图片外链生成工具在线
  • php网站开发培训专门制作小程序的公司
  • 男女之间做那种事情视频网站万网创始人