36、有效数独
请你判断一个
9x9
的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。- 数字
1-9
在每一列只能出现一次。- 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。数独部分空格内已填入了数字,空白格用
'.'
表示。注意:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
题目链接:https://leetcode-cn.com/problems/valid-sudoku/
思路:
我们需要创建三个二维数组来记录每一行、每一列、每一个小九宫格(序列均从0~8)中每个数字出现的次数。
-
row[i][index]
表示第i
行数字index+1
出现的次数 -
col[j][index]
表示第j
列数字index+1
出现的次数 -
box[box_num][index]
表示第box_num
个九宫格数字index+1
出现的次数 -
index
的计算:index = int(board[i][j]) - 1
-
box_num
的计算:box_num = i//3 * 3 + j//3
-
若该数字的个数已经超过1个则立即返回
False
-
board
全部扫描过后返回True
class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: # 创建三个二维数组分别存放每一行每一列每一个小九宫格每个数字的个数 row = [[0]*9 for i in range(9)] col = [[0]*9 for i in range(9)] box = [[0]*9 for i in range(9)] for i in range(9): for j in range(9): if board[i][j] != '.': index = int(board[i][j])-1 row[i][index] += 1 col[j][index] += 1 box_num = (i//3) * 3 + (j//3) box[box_num][index] += 1 if(row[i][index] > 1 or col[j][index] > 1 or box[box_num][index] > 1): return False return True
分类:
leetcode刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人