当前位置: 首页 > news >正文

【LeetCode - 每日1题】解数独

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵

  • 难度 ⭐⭐⭐⭐⭐
  • ✅解题思路
    • 💖概述
    • 💓核心思路
  • ✅代码实现
  • ✅ 复杂度分析
  • ✅ 测试用例验证
    • ✅ 示例1(有效数独)
    • ✅ 示例2(无效数独-行重复)
    • ✅ 边缘用例(空盘)
  • 💖总结
  • 🤝 期待与你共同进步
  • 📚 参考文档


难度 ⭐⭐⭐⭐⭐


✅解题思路

💖概述

本题要求验证一个9×9数独板的当前状态是否有效,而不需要求解。验证规则包括:

  1. 每行必须包含数字1-9且无重复
  2. 每列必须包含数字1-9且无重复
  3. 每个3×3子网格必须包含数字1-9且无重复
  4. 空格"."可忽略,只需验证已填数字

💓核心思路

使用一个集合seen同时跟踪三类规则(行、列、子网格)的数字出现情况。通过为每个数字在行、列和子网格中的出现创建唯一标识符,并在遍历过程中检查这些标识符是否重复出现。

关键创新点:

  1. 统一标识设计:为每个数字在行、列和子网格中的出现创建格式化的字符串标识符
  2. 单集合跟踪:使用一个集合同时记录三类规则的状态,节省空间
  3. 子网格映射:利用i//3和j//3将坐标映射到3×3子网格区域
  4. 提前终止:发现重复标识符立即返回False,优化性能

✅代码实现

from typing import Listclass Solution:def isValidSudoku(self, board: List[List[str]]) -> bool:seen = set()for i in range(9):for j in range(9):num = board[i][j]if num != '.':# 创建三类规则的唯一标识符row_id = f"{num} in row {i}"col_id = f"{num} in col {j}"box_id = f"{num} in box {i//3},{j//3}"
http://www.dtcms.com/a/359671.html

相关文章:

  • Tomcat 中部署 Web 应用
  • [灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU 模拟输入运放放大
  • LangChain Prompt管理核心:PromptTemplate与ChatPromptTemplate全解析
  • 旦旦的农场打卡计划
  • 合约服务架构-OOP 方式
  • Linux系统比较两个​​已排序文件​​的实用工具之comm
  • R3:适用于 .NET 的新一代响应式扩展库,事件订阅流
  • HarmonyOS 应用开发:基于API 12及以上的新特性与实践
  • 视觉大模型与多模态理解
  • MySQL直接启动命令mysqld详解:从参数说明到故障排查
  • 容器seccomp配置文件在云服务器安全策略中的实施规范
  • 基于单片机老人防丢失防摔倒系统/老人健康状态检测系统
  • 神州数码VRRP 原理与配置篇
  • 【lua】二进制数据打包和解析
  • 使用 Python 自动化检查矢量面数据的拓扑错误(含导出/删除选项)
  • 【C++ 】STL详解(六)—手撸一个属于你的 list!
  • Lua基础知识精炼
  • vscode+EIDE+Clangd环境导入keil C51以及MDK工程
  • PortSwigger靶场之Stored XSS into HTML context with nothing encoded通关秘籍
  • AG32 Nano开发板的烧录与调试工具(二)
  • LabVIEW 瀑布图与游标操作
  • Python人工智能机器学习汇总
  • MySQL 常用语法
  • CTFshow系列——命令执行web69-72
  • 贝叶斯分类(Bayes Classify)
  • 【嵌入式DIY实例】-空中鼠标
  • Ubuntu安装NVIDIA显卡驱动
  • C#基础(③CMD进程)
  • 【C2000】C2000的国产替代现状与技术关键路径
  • unity3d 中 R3 实际使用 安装方法