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

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

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

空白格用 '.' 表示。

一个数独。

答案被标成红色。

Note:

  • 给定的数独序列只包含数字 1-9 和字符 '.' 。
  • 你可以假设给定的数独只有唯一解。
  • 给定数独永远是 9x9 形式的。

DFS

唉,一言难尽。

Code

from typing import Listclass Solution:def solveSudoku(self, board: List[List[str]]) -> None:def dfs(pos: int):nonlocal validif pos == len(spaces):valid = Truereturni, j = spaces[pos]for digit in range(9):if lines[i][digit] == columns[j][digit] == block[i // 3][j // 3][digit] == False:lines[i][digit] = columns[j][digit] = block[i // 3][j // 3][digit] = Trueboard[i][j] = str(digit + 1)dfs(pos + 1)lines[i][digit] = columns[j][digit] = block[i // 3][j // 3][digit] = Falseif valid:return lines = [[False] * 9 for _ in range(9)]columns = [[False] * 9 for _ in range(9)]block = [[[False] * 9 for _ in range(3)] for _ in range(3)]valid, spaces = False, list()for i in range(9):for j in range(9):if board[i][j] == '.':spaces.append((i, j))else:digit = int(board[i][j]) - 1lines[i][digit] = columns[j][digit] = block[i // 3][j // 3][digit] = Truedfs(0)

37. Sudoku Solver相关推荐

  1. leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)

    36. Valid Sudoku https://leetcode.com/problems/valid-sudoku/ 题解 class Solution {public boolean isVal ...

  2. 【DFS + backtrack】LeetCode 37. Sudoku Solver

    LeetCode 37. Sudoku Solver Solution1: 转载自花花酱:http://zxi.mytechroad.com/blog/searching/leetcode-37-su ...

  3. [LeetCode 37] Sudoku Solver回溯解法

    原题: Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by ...

  4. 37. Sudoku Solver **

    description: 数独 Note: Example: Example 1:Input: [["5","3",".",".& ...

  5. LeetCode 37. 解数独 Sudoku Solver

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  6. LeetCode 37. Sudoku Solver--数独求解(回溯法)--Java 3ms,Python 80ms 解法

    题目地址: Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must sa ...

  7. LeetCode Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  8. C语言使用递归算法实现Sudoku Solver算法(附完整源码)

    使用递归算法实现Sudoku Solve sudoku 结构体定义 实现以下接口 C语言使用递归算法实现Sudoku Solve算法完整源码(定义,实现,main函数测试) sudoku 结构体定义 ...

  9. LeetCode:Sudoku Solver Valid Sudouku

    其实数独还是我挺喜欢的一个游戏.原来有本数独的书. 其实Sudoku是基于Valid Sudouku.其实一开始有点想太多.基于平常玩数独的经验,有很多解数独的规则.貌似这个人为判断因素比较多. 而且 ...

最新文章

  1. ❤️Spark的关键技术回顾,持续更新!【推荐收藏加关注】❤️
  2. HTML中checked1001无标题,是否可以一键切换两个CSS`:checked`伪类?
  3. C++输入、输出优化模板整理
  4. php添加上传附件,phpweb招聘模块job上传简历附件的修改办法
  5. 一些大厂的css reset 代码
  6. [20个项目学会BBC micro:bit编程] 15-超声波测距实验
  7. API 安全成企业考虑的第一要务
  8. 深入继承之抽象类和接口综合分析及完整案列解说(一)
  9. 原型万事通,你想知道(但不敢问)的都在这里
  10. ROS软路由的基本操作
  11. Lambda 表达式(C# 编程指南)
  12. Ragel——基于有限状态机用于产生源码的编译器
  13. CAD编辑指南5:输出高清图片和新建空白图纸
  14. Linux用户管理 (实验2)
  15. Web服务器和http请求
  16. SpringBoot + Thymeleaf 练手小项目 --------- 豆瓣网站模拟
  17. AlphaGo设计师黄士杰:“最强的学习技能在人类的脑袋里”
  18. 网络诊断工具之—IP连接测试ping命令
  19. git 误删分支恢复方法
  20. 占位图和图片懒加载项目实战详解

热门文章

  1. shutil的一些基本用法
  2. 代码质量的几点新思考
  3. 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
  4. SQL Server数据库大型应用解决方案总结
  5. .net开发人员应该知道(一)
  6. 在ASP.net 中对GridView中数据的删除、编辑等操作:
  7. linux建立普通用户命令,Linux普通用户执行特定的命令配置
  8. 7-1 最大子列和问题 (20 分)
  9. 每日程序C语言44-反向输出一个链表(递归)
  10. Java黑皮书课后题第5章:**5.34(游戏:石头、剪刀、布)编程练习题3.17给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止