这道题是官方编辑的初级算法中数组部分的一个题目,是一道中等难度的题。首先还是先看一下题目描述吧。

题目地址:有效的数独
数独大家都很熟悉,简单来讲这个题目就是要让我们写一个程序判断这个数独是不是合法的。但是题目并不要求我们判断数独是不是可解的,而且数独是一个9宫格。

解答方法

拿到这题第一反应还是暴力法,直接遍历三次,一次判断每行是否合法,一次判断每列是否合法,一次判断每个33的格子是否合法。但是实际上,这三个判断并不需要遍历数组三次,只需要一次就够了。另外,遍历每一个33的格子这个有点难度,反正我做的时候是一直没有想到,直到看了答案才知道怎么做。
为了判断每行内列每个格子是否合法,就是判断是否有重复元素,那么我们首先想到的肯定是使用哈希表。这个题使用哈希表是可以的,但是实际上,因为这题只涉及到9个元素,我们直接使用数组就可以了。为行,列,和3*3的格子各初始化一个二维数组,存放每行每列每个格子里面各元素出现次数,有次数大于1的就直接返回False。

在遍历时,我们需要知道当前遍历到的是哪一行哪一列以及哪一个格子。在哪行哪列很好判断,直接就是当前元素下标。但是如上图所示,我们要怎么知道现在处于哪一个格子呢,我们可以采用这个公式来判断,使用i,j分别代表行和列的下标,那么当前所在格子应该是(i/3)*3+j/3,其中/是取商的操作。这个公式的意思就是将行和列的每三步当做一个格子的一步,行或者列每走三步,那么格子的下标就走一步。解决了格子的编号问题,这个题的代码就简单了。

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):num = board[i][j]box_index = (i//3)*3 + j//3if num != '.':num = int(num)-1row[i][num] = row[i][num] + 1col[j][num] = col[j][num] + 1box[box_index][num] = box[box_index][num]+1if row[i][num]>1 or col[j][num]>1 or box[box_index][num]>1:return Falsereturn True

这个题总体来说对我还是有些难度的,最主要的是如何去判断3*3格子的合法性困扰了我很久,直到看到答案才知道原来是这样。

LeetCode刷题|36有效的数独相关推荐

  1. LeetCode刷题——36.有效的数独

    文章目录 面试刷题第二天 LeetCode刷题--36.有效的数独 1.题目描述 2.解题思路(一) 3.解题思路(二) 面试刷题第二天 LeetCode刷题--36.有效的数独 1.题目描述 请你判 ...

  2. leetcode刷题随笔数独是否合法利用dfs求数独的解

    最近看了一两篇关于leetcode刷题的总结,大体意思就是尽量不要使用ide(lll¬ω¬)然后默写代码保证bug free,这tm就让人很蒙蔽了,lz一直是用visual studio ,有时候程序 ...

  3. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

  4. LeetCode刷题笔记汇总

    LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...

  5. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  6. C#LeetCode刷题-剑指Offer

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-剑指Offer | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode剑指Offer ...

  7. C#LeetCode刷题-队列

    队列篇 # 题名 刷题 通过率 难度 363 矩形区域不超过 K 的最大数值和 27.2% 困难 621 任务调度器 40.9% 中等 622 设计循环队列 C#LeetCode刷题之#622-设计循 ...

  8. C#LeetCode刷题-字典树

    字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树) 48.6% 中等 211 添加与搜索单词 - 数据结构设计 39.9% 中等 212 单词搜索 II 27.9% 困难 33 ...

  9. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制 33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索树迭 ...

最新文章

  1. 安卓收取费用_作为自由职业者应收取的费用:以价值为基础的定价是否能达到炒作的目的?...
  2. CVPR新规严禁审稿期间公开宣传论文,可发arXiv,LeCun:疯了吧!
  3. 怎么将jenkins打包后的war自动部署到jetty上? 1
  4. Linux下快速安装TensorFlow的教程
  5. 微软研究员在ImageNet计算机视觉识别挑战中实现里程碑式突破
  6. linux 压缩解压归档
  7. Java迭代器中的next()方法
  8. 晒一下我的代码生成器
  9. php文件夹重命名,PHP自动重命名文件实现方法
  10. Python爬虫_HTTP标准
  11. 百度、阿里等大厂面试技巧总结,Java工程师必看!
  12. C++ 3D物理引擎库BulletPhysics基本使用
  13. 北京市强化电信用户信息安全保护
  14. DELL R430服务器做raid5以及安装操作系统过程
  15. Matlab2017a/b激活license.lic文件
  16. 201671010426 孙锦喆 实验二词频统计软件项目报告
  17. UNITY TMP PRO 字体制作
  18. mysql物理备份恢复搭建从库_RDS FOR MYSQL 各版本利用物理备份搭建从库方法
  19. ios开发---URL Schemes 使用详解-app协议
  20. 流体力学发展史(转)

热门文章

  1. 7.ROS编程学习:自定义服务数据c++调用
  2. 【STM32】标准库-SDIO-SDHC
  3. Android studio 编译项目出现Keystore was tampered with, or password was incorrect
  4. [艾兰岛]制作传送门之传送技能——kura酱长期更新
  5. 小程序中图片太大应该怎么处理
  6. 共阴数码管显示0~9的数字
  7. 内存 显存,cpu,GPU,显卡
  8. 成为一棵大树必备的6个条件
  9. 一维数组二维数组(排序 最大值 插入排序)
  10. 个人号微信二次开发,微信ipad协议