【Leetcode】【中等】【36. 有效的数独】【JavaScript】
题目描述
36. 有效的数独
判断一个 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
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。说明:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 '.' 。
给定数独永远是 9x9 形式的。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-sudoku
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答:
解答:
个人思路:
1、检测每行是否有重复数字;
2、检测每列是否有重复数字;
3、检测每个3*3内是否有重复数字。
96ms
- /**
- * @param {character[][]} board
- * @return {boolean}
- */
- function isRepeat(arr) {
- let hash = {}
- for (let i = 0; i < arr.length; i++) {
- if (!isNaN(arr[i])) {
- if (hash[arr[i]]) {
- return false
- } else {
- hash[arr[i]] = 1
- }
- }
- }
- return true
- }
- var isValidSudoku = function (board) {
- let result
- let colArr = []
- let blockArr = []
- //每一行是否重复检测
- for (let i = 0; i < board.length; i++) {
- result = isRepeat(board[i])
- if (!result) {
- console.log('行重复')
- return false
- }
- }
- //每一列是否重复检测
- for (let i = 0; i < board.length; i++) {
- for (let j = 0; j < board[i].length; j++) {
- if (!colArr[j]) {
- colArr[j] = []
- }
- colArr[j].push(board[i][j])
- }
- }
- for (let i = 0; i < colArr.length; i++) {
- result = isRepeat(colArr[i])
- if (!result) {
- console.log('列重复')
- return false
- }
- }
- //3*3是否重复
- let block = 0
- for (let i = 0; i < board.length; i++) {
- let reset = block
- for (let j = 0; j < board[i].length; j++) {
- if (!blockArr[block]) {
- blockArr[block] = []
- }
- blockArr[block].push(board[i][j])
- if ((j + 1) % 3 === 0) {
- block++
- }
- if (j === 8) {
- block = reset
- }
- }
- if ((i + 1) % 3 === 0) {
- block += 3
- }
- }
- for (let i = 0; i < blockArr.length; i++) {
- result = isRepeat(blockArr[i])
- if (!result) {
- console.log('3*3重复')
- return false
- }
- }
- //以上三种检测都通过
- return true
- };
【Leetcode】【中等】【36. 有效的数独】【JavaScript】的更多相关文章
- 前端与算法 leetcode 36. 有效的数独
目录 # 前端与算法 leetcode 36. 有效的数独 题目描述 概要 提示 解析 算法 传入[['5', '3', '.', '.', '7', '.', '.', '.', '.'],['6' ...
- Java实现 LeetCode 36 有效的数独
36. 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在 ...
- [leetcode] 36. 有效的数独(Java)
没啥好说的,直接上就行 36. 有效的数独 class Solution { public boolean isValidSudoku(char[][] board) { Map<Charact ...
- LeetCode 中等题解(3)
34 在排序数组中查找元素的第一个和最后一个位置 Question 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂 ...
- 【LeetCode】36. Valid Sudoku 解题报告(Python)
[LeetCode]36. Valid Sudoku 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址 ...
- leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独
leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...
- LeetCode(36): 有效的数独
Medium! 题目描述: 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1 ...
- Leetcode题库——36.有效的数独
@author: ZZQ @software: PyCharm @file: leetcode36_isValidSudoku.py @time: 2018/11/19 19:27 要求:判断一个 9 ...
随机推荐
- [转载]桥接与NAT
NAT相当于是局域网中的局域网,把192.168.21.1当作外网ip,重新划分了一个网关(192.168.33.x) 网桥只是把网络桥接起来,还是原来的网关(192.168.21.x),虚拟机相当于 ...
- python3 爬虫利用Requests 实现下载进度条
一.编写代码 from datetime import datetime,date,timedelta from contextlib import closing import urllib,url ...
- selenium之定位详篇
一.Web定位方法(find_elements返回元素list) 1.id: find_element_by_id() # find_element_by_id("id") fi ...
- MySQL和Oracle的区别与不同
一.mysql与Oracle的相同点: 1.都是关系型数据库管理系统(MySQL开放源码) 2.都是目前很流行的数据库(Oracle以分布式为核心): 二.MySQL.Oracle各自特点: 1.Or ...
- superset的安装(win10)踩踩坑!AWSL
基本安装参考https://www.jianshu.com/p/8b27ff71429f 按此方案装的时候会遇到各种flask版本不兼容的问题,所以 第一步:装好anaconda 第二部:保证好高于V ...
- JS 定时器/延时器
定时器 创建定时器 window.setInterval(方法类型,间隔时间(1000=1秒)) var timer=window.setInterval(func,2000); var i=0 ...
- Vue 组件系统
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 每一个新技术的诞生,都是为了解决 ...
- 项目遇到的问题:页面c:forEach循环的数据进行计算传回后台并保持到数据库
应该还有更简单的方法 但是我不晓得 手动给文本框输入数据保存到数据库 A表 :通过订单编号 查询数据获得 B表 :通过A表中的字段查询遍历获得 问题: 手动输入文本框内容 保存到数据库 页面form提 ...
- 游记-pkupc&cts2019
Day0 和boshi.Rayment组的队,昨天听学长说这次比赛可以加学分,他们信科的大部分人都会参加,估摸有两百多支队伍--然而奖品只有不到一百份 我要奖品呐! 上午十一点半到的北京,拉着行李提着 ...
- 怎样通过混入(Mixin)实现多继承
js不提供现成的多重继承的方法, 但可以通过Object.assign()来手动实现: function Father1(name){ this.name = name; } function Fat ...