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
posted on   墩墩儿er  阅读(423)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人



点击右上角即可分享
微信分享提示