有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

注意:

一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
空白格用 ‘.’ 表示。

示例 1:

输入:board =
[[“5”,“3”,".",".",“7”,".",".",".","."]
,[“6”,".",".",“1”,“9”,“5”,".",".","."]
,[".",“9”,“8”,".",".",".",".",“6”,"."]
,[“8”,".",".",".",“6”,".",".",".",“3”]
,[“4”,".",".",“8”,".",“3”,".",".",“1”]
,[“7”,".",".",".",“2”,".",".",".",“6”]
,[".",“6”,".",".",".",".",“2”,“8”,"."]
,[".",".",".",“4”,“1”,“9”,".",".",“5”]
,[".",".",".",".",“8”,".",".",“7”,“9”]]
输出:true
示例 2:

输入:board =
[[“8”,“3”,".",".",“7”,".",".",".","."]
,[“6”,".",".",“1”,“9”,“5”,".",".","."]
,[".",“9”,“8”,".",".",".",".",“6”,"."]
,[“8”,".",".",".",“6”,".",".",".",“3”]
,[“4”,".",".",“8”,".",“3”,".",".",“1”]
,[“7”,".",".",".",“2”,".",".",".",“6”]
,[".",“6”,".",".",".",".",“2”,“8”,"."]
,[".",".",".",“4”,“1”,“9”,".",".",“5”]
,[".",".",".",".",“8”,".",".",“7”,“9”]]
输出:false
解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。

(上述题目来源于LeetCode)

解法:
class Solution {public boolean isValidSudoku(char[][] board) {//int在Java 程序中使用数组时,如果没有为数组元素指定初始值,int 型数组元素的默认初始值为0。//定义行二维数组,表示第i行出现数字几int [][]rows = new int[9][9];//定义列二维数组,表示第j列出现数字几int [][]columns = new int[9][9];//定义9个3x3宫格,表示第几个宫格出现数字几int [][][]block = new int[3][3][9];//遍历for(int i=0;i<9;i++){for(int j=0;j<9;j++){//定义一个char类型变量c等于遍历的每一个数char c = board[i][j];//如果c等于'.'不作任何操作//如果等于1-9的数字if(c != '.'){//由于定义的二维数组中,第i行或者j列或者宫格内,数组的下标都是0-8,所以c要减1int index = c - '1';//第i行,第j列,第几个宫格出现数字index的次数加1rows[i][index]++;columns[j][index]++;block[i/3][j/3][index]++;//如果在第i行,第j列,第几个宫格内出现数字index的次数大于1,返回false,//否则,遍历完以后返回trueif(rows[i][index] > 1 || columns[j][index] > 1 ||block[i/3][j/3][index] > 1)return false;}}}return true;}
}

在本题中,需要注意的是在java中,在定义类型为int的数组时,如果没有为各个数组元素定义初始数值,那么int类型的数组的默认初始值为0。另外,在本题中,对于行二维数组,列二维数组,宫格三维数组的定义有些抽象。行二维数组与列二维数组的第一维表示行数或者列数,第二维表示可能出现的数字;宫格三维数组前两维表示第几行第几列(最多表示第2行第2列)的3 x 3宫格,第三维表示可能出现的数字。本题中,由于定义的 c 等于 1-9,而数组下标表示为 0-8,所以在代码中的index等于 c 减1,以防止数字下标越界。

LeetCode_数据结构入门_有效的数独相关推荐

  1. leetcode数据结构入门-36. 有效的数独

    请你判断一个 9x9 的数独是否有效.只需要 根据以下规则 ,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...

  2. 数据结构入门最佳书籍_最佳数据科学书籍

    数据结构入门最佳书籍 Introduction 介绍 I get asked a lot what resources I recommend for people who want to start ...

  3. Leetcode数据结构入门

    在预习数据结构,所以写了力扣的数据入门题单,做个整理. Leetcode数据结构入门 第一天--第五天:数组 第六天:字符串 第七天--第八天:链表 第九天:队列/栈 第十天--第十四天:树 第一天 ...

  4. 自考数据结构和数据结构导论_我跳过大学自学数据科学

    自考数据结构和数据结构导论 A few months back, I decided I wanted to learn data science. In order to do this, I sk ...

  5. 《LeetCode》数据结构入门板块

    文章目录 <LeetCode题>数据结构入门板块 第1天 数组 217.存在重复元素[简单,哈希表] 53.最大子序和[简单,动态规划,贪心] 第2天 数组 1.两数之和[简单,哈希表] ...

  6. Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题

    文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...

  7. Algorithms_基础数据结构(03)_线性表之链表_双向链表

    文章目录 大纲图 双向链表 双向链表的基本结构 双向链表的基本操作 头插 尾插 中间部位插入 删除头部 删除尾部 删除中间位置的数据 查找 更新 Code 总结 大纲图 双向链表 Algorithms ...

  8. JAVA入门_多线程_邮局派发信件

    JAVA入门_多线程_邮局派发信件 Postman package cn.campsg.java.experiment.entity;public class Postman {private Str ...

  9. 数据结构入门(一级)

    数据结构和算法的入门:在这里我们先回答大家三个问题1. 为什么要学习数据结构2. 有哪些数据结构3. 学习数据结构的四种境界知道了这三个问题之后呢,再来进行具体内容的一个学习,先看第一个,为什么要学些 ...

最新文章

  1. Android模拟器SD卡的使用
  2. 浅析Facebook文字理解引擎DeepText
  3. flash mini播放器
  4. java thrift client_使用thrift的java client调用python server
  5. 宝塔php共生,宝塔面板如何开启php扩展
  6. 这年头学爬虫还就得会点 scrapy 框架
  7. 高级语言程序设计用c语言描述答案,清华大学出版社-图书详情-《高级语言程序设计(C语言描述)第2版》...
  8. 是人是谁_谁是白鹤滩最可爱的人
  9. 结束十年科学争论,张辰宇团队阐明食物miRNA被胃吸收的分子机制,miRNA跨界调控再添力证...
  10. 联想打印机驱动安装报错
  11. python动力学_用python学振动分析(一)
  12. Linux使用Wget实现整站下载
  13. 专利申请“技术交底书”的要素和撰写要求
  14. google服务框架 闪退_华为的谷歌服务打不开怎么办?
  15. 独木难成林,不管是自己在支付宝单种还是钉钉合种,都是在做公益
  16. 写了一个个人资产管理的后台系统
  17. 大灾变黑暗日子:静态分析和Roguelike游戏
  18. 一个屌丝程序猿的人生(九十六)
  19. 016.从中序与后序遍历序列构造二叉树
  20. 构建开发环境 构建demo_构建自己的wotsapp第6部分

热门文章

  1. 分布式会话和基于TOKEN的分布式会话
  2. “getfacl: Removing leading '/' from absolute path names”解决办法
  3. 学计算机日语受限制吗,高考日语受限的专业有哪些?可以报考哪些大学?
  4. html如何将input上下移动,JS实现表格使用上下左右键在input移动
  5. 安卓下的c语言ide,C语言编译器IDE
  6. java下载本地文件xlsx
  7. 什么是RTP、RTCP和RSVP?
  8. RoboMaster视觉教程(3)视觉识别程序整体框架
  9. JAVA生成唯一递增序列_java代码薄:递增序列
  10. ValueError: Expected 2D array, got 1D array instead: 的解决办法