首页 > 其他分享 >37. 解数独(难)

37. 解数独(难)

时间:2023-12-30 14:35:24浏览次数:28  
标签:return 数字 List 37 board str 解数 数独

目录

题目

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

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

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

题解:回溯

class Solution:
    def solveSudoku(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        def backtrack(board: List[List[str]], i: int, j: int) -> bool:
            m, n = 9, 9
            if j == n:
                return backtrack(board, i + 1, 0)  # 穷举到最后一列的话就换到下一行重新开始
            if i == m:#base case
                return True  # 所有行都填满,数独解决完成
            if board[i][j] != '.':
                return backtrack(board, i, j + 1)  # 当前位置已有数字,填充下一个位置
                
            for ch in range(1, 10):
                if isValid(board, i, j, str(ch)):#检查当前数字是否合法
                    board[i][j] = str(ch)  # 合法则填入数字
                    if backtrack(board, i, j + 1):  # 如果找到一个可行解,立即结束
                        return True
                    board[i][j] = '.'  # 回溯,撤销当前位置的填充
            return False#穷举完1-9,依然没有找到可行解,此路不通
        
        def isValid(board: List[List[str]], r: int, c: int, n: str) -> bool:
            for i in range(9):
                if board[r][i] == n:
                    return False  # 检查当前行是否有相同数字
                if board[i][c] == n:
                    return False  # 检查当前列是否有相同数字
                if board[(r // 3) * 3 + i // 3][(c // 3) * 3 + i % 3] == n:
                    return False  # 检查当前 3x3 方框内是否有相同数字
            return True

        # 调用回溯函数进行数独求解
        backtrack(board, 0, 0)
        # 已解决的数独
        for row in board:
            ' '.join(row)
        return board

标签:return,数字,List,37,board,str,解数,数独
From: https://www.cnblogs.com/lushuang55/p/17936330.html

相关文章

  • 37 基于FPGA的LVDS信号环路测试
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述LVDS(LowVoltageDifferentialSignalin)是一种低振幅差分信号技术。它使用幅度非常低的信号(约350mV)通......
  • 37. 干货系列从零用Rust编写负载均衡及代理,负载均衡中try_files实现
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/......
  • Emu2:37亿参数开创多模态生成新篇章
    引言多模态任务在人工智能领域一直是极具挑战性的「技术高地」。智源研究院最近开源发布的新一代多模态基础模型Emu2,在这一领域取得了突破性进展。Emu2以其庞大的37亿参数规模和强大的多模态生成能力,为AI的多模态理解和生成开启了新的篇章。模型概述Emu2是一款大规模自回归生成式多......
  • 安装go-icp_cython-master报错error C2371: “int8_t”: 重定义;不同的基类型
    库链接:aalavandhaann/go-icp_cython:用于全局最优3D点集配准的Go-ICP(github.com)解决方法:找到matrix.hpp文件,用记事本打开,在__int8之前加入signed,然后保存。 ......
  • error: failed to push some refs to 'http://192.168.1.37:1080/nongzi/nongzi-apple
    当你直接在github上在线修改了代码,或者是直接向某个库中添加文件,但是没有对本地库同步,接着你想push上传到远程库,就会失败,  这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了先把自己代码暂存,然后再拉取更新,然后提交代码 也可参考 http......
  • [EFI]Gigabyte-Z790-Aorus-Elite-AX-13700K电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板GigabyteZ790AorusEliteaxDDR5处理器I713700K已驱动内存8GBDDR3(orsomethinglikethat)已驱动硬盘WDCPCSN730SDBQNTY-256G-1001已驱动显卡GigabyteRX6600EAGLE8G已驱动声卡RealtekALC285已驱动网卡LucyRTL8125Ethernet已驱动无线网卡+蓝牙Int......
  • 初中英语优秀范文100篇-037Books or TV?-书还是电视
    PDF格式公众号回复关键字:SHCZFW037记忆树1BooksorTV?IpreferbooksbecausebookshavemanyadvantagesoverTV.翻译书籍还是电视?我更喜欢书籍,因为相比电视,书籍有许多优势简化记忆喜欢句子结构1"BooksorTV?":这是一个选择疑问句,用来询问对方对某事物的偏好。......
  • 637. 二叉树的层平均值
    目录题目题解:BFS题目给定一个非空二叉树的根节点root,以数组的形式返回每一层节点的平均值。与实际答案相差10-5以内的答案可以被接受。题解:BFSclassSolution:defaverageOfLevels(self,root:Optional[TreeNode])->List[float]:q=[root]#用列表做......
  • 字符函数和字符串函数:strcmp、strncpy——《初学C语言第37天》
    //////————strcmp(比较两个字符串(的内容,ASCII值))————>头文件#include<string.h>//第一个字符串大于第二个字符串,则返回大于0的数字//第一个字符串等于第二个字符串,则返回0//第一个字符串小于第二个字符串,则返回小于0的数字//那么如何判断两个字符串?//比较方法:下标逐步......
  • Day37 数组的定义、声明和创建
    数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.​(数组的下标是从0开始的!!!!!!)数组的声明和创建1.首先必......