网站首页 > 博客文章 正文
算法题目
请你判断一个 9 x 9 数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
算法示例
注意事项
一个有效的数独(部分已被填充)不一定是可解的。
空白格用 '.' 表示。
常用算法:数组,哈希表,矩阵
解题思路
将行、列、小格子数组数据转换为哈希表进行判断解题,遍历的数据在行、列、小格子里则跳过,否则添加;
代码如下
from collections import defaultdict
from typing import List
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
# 将数组转化为哈希表解题
row, col, sqrt = defaultdict(set), defaultdict(set), defaultdict(set)
for i in range(9):
for j in range(9):
tmp = board[i][j]
if tmp == ".":
continue
grid = i // 3 * 3 + j // 3 # 计算九宫格位置
# if tmp in row[i] or tmp in col[j] or tmp in sqrt[grid]:
if tmp in (row[i] | col[j] | sqrt[grid]):
return False
row[i].add(tmp)
col[j].add(tmp)
sqrt[grid].add(tmp)
return True
数独进阶版
编写一个程序,通过填充空格来解决数独问题。
常用算法:数组 回溯 矩阵
算法示例
解题思路
使用回溯进行处理,通过列、行遍历,进行判断当前获取的数字是否在行、列和小格子里,如果存在则进行后续判断,否则赋值;
代码如下
from typing import List
class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
"""
回溯法
def backtrack(path, selected):
if 满足停止条件:
res.append(path)
for 选择 in 选择列表:
做出选择
递归执行backtrack
撤销选择
"""
def backtrack(board, i, j):
# 回溯
if j == 9: # 列遍历完,遍历行
return backtrack(board, i + 1, 0)
if i == 9: # 行遍历完,结束
return True
if board[i][j] != ".": # 非空进行下一个
return backtrack(board, i, j + 1)
for t in range(1, 10):
if not self.check(board, i, j, str(t)): # 判断选择的字符是否满足要求
continue
board[i][j] = str(t) # 做选择,赋值
if backtrack(board, i, j + 1): # 递归调用
return True
board[i][j] = '.' # 撤销选择
backtrack(board, 0, 0)
def check(self, board, row, col, s):
# 检查数字是否在行、列和小格子里
for i in range(9):
if board[row][i] == s:
return False
if board[i][col] == s:
return False
if board[(row // 3) * 3 + i // 3][(col // 3) * 3 + i % 3] == s:
return False
# for i in range(9):
# if s in [board[row][i], board[i][col], board[(row // 3) * 3 + i // 3][(col // 3) * 3 + i % 3]]:
# return False
return True
总结
人生苦短,我用python!
猜你喜欢
- 2024-09-26 python中的容器(Collections)(python中的容器包括)
- 2024-09-26 脑血管病知识图谱--2 模型训练(脑血管疾病讲解)
- 2024-09-26 机器学习之:跑通第一个入门算法(如何跑通github代码)
- 2024-09-26 订阅者模式,公众号、B站、快手用了都说好
- 2024-09-26 Python 6 个字典操作,你都知道吗
- 2024-09-26 学会Python的collections模块,助力编程轻松赚钱与体育数据分析
- 2024-09-26 Python里超级好用的字典模块:Addict 模块
- 2024-09-26 10个提高python水平的高级知识点(python 提高效率)
- 2024-09-26 Monte Carlo方法解决强化学习问题
- 2024-09-26 数据结构和算法 ? 字典中的键映射多个值
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)