初级算法-10. 有效的数独
题目描述:
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
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. 有效的数独相关推荐
- LeetCode 探索初级算法-数组:10 有效的数独-20200321
10 有效的数独-20200321 题目 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一 ...
- [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]
初级算法 - 数组篇完结: 初级算法 - 数组(一): https://blog.csdn.net/weixin_43854928/article/details/121315702 初级算法 - 数 ...
- LeetCode初级算法(数组)解答
这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想先转成整数,加1后再转回去:耽美想到测试的例子考虑到了这个方法的笨重,所以int类型超了最大范围65536,导致程序出错. class ...
- LeetCode_初级算法_数组
LeetCode|初级算法_数组 题目如下: 1.1 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间 ...
- 【力扣刷题笔记】初级算法
初级算法 数组 1.删除排序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 ...
- leetcode探索专题中的初级算法练习题(python代码+解题思路)
本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...
- leetcode初级算法6.字符串转整数(atoi)
leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceS ...
- leetcode初级算法5.加一
leetcode初级算法5.加一 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] plusOne(int[] digits) {//获取digits ...
- 图解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. ...
最新文章
- 报名 | 瓜子二手车周洲:如何玩转AI赋能下的新零售?
- STM32 进阶教程 13 – FLASH的读写操作
- python中文件操作中不同的文件操作有何差异_Python学习基础篇 -6: Python中的文件操作...
- [转载]dbms_lob用法小结
- linux 函数 文件校验,Linux中的文件效验命令
- 不同版本操作系统和数据库的之间链接,和操作
- 通向架构师的道路(第八天)之weblogic与apache的整合与调优 转
- vue template标签_vue为什么要求组件模板只能有一个根元素?
- atitit.提升软件开发的效率and 质量的那些强大概念and方法总结
- 用you-get下载JayChou专辑
- 使用JavaScript实现纯前端读取excel文件并与后台进行交互
- 姓氏头像制作小程序源码_全新UI带头像库_支持多流量主模式
- c语言汉字转拼音,C#汉字转拼音(支持多音字)
- android intent scheme,android Scheme使用 打开指定的Activity
- 如何建立NVivo的人际关系?
- 垃圾收集器和内存分配策略
- 【python爬虫 系列】1.理解网络爬虫
- 机械原理复习试题及答案
- ESP32-BMP180气压、气温传感器
- String.matches()的用法