题目描述:

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

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

如图是一个部分填充的有效的数独

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例 1:
输入:
[["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:
输入:
[["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

说明:

  • 一个有效的数独(部分已被填充)不一定是可解的。
  • 只需要根据以上规则,验证已经填入的数字是否有效即可。
  • 给定数独序列只包含数字 1-9 和字符 '.' 。
  • 给定数独永远是 9x9 形式的。
 

分析:1.可通过遍历每一列、每一行、每个3*3格子判断是否有重复元素

    此解法执行时间11ms ,超过82%Java提交记录(2019.4.27)

 1 class Solution {
 2     public static boolean isValidSudoku(char[][] board) {
 3
 4         HashSet<Character> set=new HashSet<Character>();       //判断每一行
 5         for(int i=0;i<9;i++){
 6             for(int j=0;j<9;j++) {
 7                 if(board[i][j]!='.') {
 8                     if(!set.add(board[i][j]))
 9                         return false;
10                 }
11             }
12             set.clear();
13         }      //判断每一列
14         for(int i=0;i<9;i++){
15             for(int j=0;j<9;j++) {
16                 if(board[j][i]!='.') {
17                     if(!set.add(board[j][i]))
18                         return false;
19                 }
20             }
21             set.clear();
22         }      //判断每个3*3格子
23         for(int i=0;i<9;i+=3) {
24             for(int j=0;j<9;j+=3){
25                 for(int k=0;k<3;k++)
26                     for(int l=0;l<3;l++) {
27                         if(board[i+k][j+l]!='.')
28                         if(!set.add(board[i+k][j+l]))
29                             return false;
30                     }
31                 set.clear();
32             }
33
34         }
35         return true;
36     }
37 }

2.提交记录中最快的:执行1ms

 1 class Solution {
 2     boolean canPut(char[][] board, int i, int j, char v) {
 3         for(int k = 0; k < 9; k++) {
 4             if(board[i][k] == v
 5                || board[k][j] == v
 6                || board[i / 3 * 3 + k % 3][j / 3 * 3 + k / 3] == v) {
 7                 return false;
 8             }
 9         }
10         return true;
11     }
12     public boolean isValidSudoku(char[][] board) {
13         for(int i = 0; i < 9; i++) {
14             for(int j = 0; j <9; j++) {
15                 if(board[i][j] != '.') {
16                     char t = board[i][j];
17                     board[i][j] = '.';
18                     if(!canPut(board, i, j, t))
19                         return false;
20                     board[i][j] = t;
21                 }
22             }
23         }
24         return true;
25     }
26 }

转载于:https://www.cnblogs.com/hzhqiang/p/10781194.html

初级算法-10. 有效的数独相关推荐

  1. LeetCode 探索初级算法-数组:10 有效的数独-20200321

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

  2. [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]

    初级算法 - 数组篇完结: 初级算法 - 数组(一): https://blog.csdn.net/weixin_43854928/article/details/121315702 初级算法 - 数 ...

  3. LeetCode初级算法(数组)解答

    这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...

  4. LeetCode_初级算法_数组

    LeetCode|初级算法_数组 题目如下: 1.1 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间 ...

  5. 【力扣刷题笔记】初级算法

    初级算法 数组 1.删除排序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 ...

  6. leetcode探索专题中的初级算法练习题(python代码+解题思路)

    本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...

  7. leetcode初级算法6.字符串转整数(atoi)

    leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceS ...

  8. leetcode初级算法5.加一

    leetcode初级算法5.加一 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] plusOne(int[] digits) {//获取digits ...

  9. 图解leetcode初级算法python版 pdf_图解LeetCode初级算法(Python版)

    第1章 浅谈算法 1.1 算法概述 1.2 度量算法 1.2.1 时间复杂度 1.2.2 空间复杂度 1.3 Python&Pythonic 第2章 基础算法之排序 2.1 冒泡排序 2.1. ...

最新文章

  1. 报名 | 瓜子二手车周洲:如何玩转AI赋能下的新零售?
  2. STM32 进阶教程 13 – FLASH的读写操作
  3. python中文件操作中不同的文件操作有何差异_Python学习基础篇 -6: Python中的文件操作...
  4. [转载]dbms_lob用法小结
  5. linux 函数 文件校验,Linux中的文件效验命令
  6. 不同版本操作系统和数据库的之间链接,和操作
  7. 通向架构师的道路(第八天)之weblogic与apache的整合与调优 转
  8. vue template标签_vue为什么要求组件模板只能有一个根元素?
  9. atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
  10. 用you-get下载JayChou专辑
  11. 使用JavaScript实现纯前端读取excel文件并与后台进行交互
  12. 姓氏头像制作小程序源码_全新UI带头像库_支持多流量主模式
  13. c语言汉字转拼音,C#汉字转拼音(支持多音字)
  14. android intent scheme,android Scheme使用 打开指定的Activity
  15. 如何建立NVivo的人际关系?
  16. 垃圾收集器和内存分配策略
  17. 【python爬虫 系列】1.理解网络爬虫
  18. 机械原理复习试题及答案
  19. ESP32-BMP180气压、气温传感器
  20. String.matches()的用法

热门文章

  1. 华为服务器RH2288做raid方法
  2. 华为智能家居app未能连接上远程云服务_华为云主机远程连接不上 华为云服务登录手机版...
  3. grep 命令使用(2)
  4. 软件项目管理作业(一)
  5. Electron-vueda打包EXE文件,打开后白屏
  6. 给定divId,滚动条滚到相应位置
  7. 两个高斯分布乘积的理论推导
  8. Cass10.1独立地物简码识别功能
  9. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
  10. Linux - 一次性计划任务之at命令使用