LeetCode36 有效的数独

news2024/11/24 6:08:46

请你判断一个 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 存在, 因此这个数独是无效的。

 提示:

board.length == 9
board[i].length == 9
board[i][j] 是一位数字(1-9)或者 '.'

解题思路

有效数独的要求是就是:

1、每一行1-9都要出现一遍,不能缺失、不能重复

2、每一列1-9都要出现一遍,不能缺失、不能重复

3、每一个 3x3 的小宫格内1-9都要出现一遍,不能缺失、不能重复

所以对每个不为空的数字都检查一遍是否在同一列、同一行、同一宫格内已存在相同的数字。存在即为无效数独。不存在则加入该行、该列、该宫内。

全部检查完毕则为有效数独

java实现

class Solution {
    public boolean isValidSudoku(char[][] board) {
        HashSet[] rows = new HashSet[9];
        HashSet[] cols = new HashSet[9];
        HashSet[] blocks = new HashSet[9];
        for(int i=0; i<9; i++){
            rows[i] = new HashSet();
            cols[i] = new HashSet();
            blocks[i] = new HashSet();
        }
        for(int i=0; i<9; i++){
            for(int j=0; j<9; j++){
                int blockid = convertRolCol(i, j);
                if(board[i][j]!='.'){
                    if(rows[i].contains(board[i][j])){
                        return false;
                    }
                    if(cols[j].contains(board[i][j])){
                        return false;
                    }
                    if(blocks[blockid].contains(board[i][j])){
                        return false;
                    }
                    rows[i].add(board[i][j]);
                    cols[j].add(board[i][j]);
                    blocks[blockid].add(board[i][j]);
                }
            }
        }
        return true;
    }

    public int convertRolCol(int i, int j){
        if(i>=0&&i<3){
            if(j>=0&&j<3){
                return 0;
            }else if(j>=3&&j<6){
                return 1;
            }else {
                return 2;
            }
        }else if(i>=3&&i<6){
            if(j>=0&&j<3){
                return 3;
            }else if(j>=3&&j<6){
                return 4;
            }else {
                return 5;
            }
        }else {
            if(j>=0&&j<3){
                return 6;
            }else if(j>=3&&j<6){
                return 7;
            }else {
                return 8;
            }
        }
    }
}

python实现

class Solution(object):
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        rows = [set() for _ in range(9)]
        cols = [set() for _ in range(9)]
        blocks = [set() for _ in range(9)]
        for i in range(9):
            for j in range(9):
                blockId = self.convertRolCol(i, j)
                if board[i][j] != '.':
                    if board[i][j] in rows[i]:
                        return False
                    if board[i][j] in cols[j]:
                        return False
                    if board[i][j] in blocks[blockId]:
                        return False
                    rows[i].add(board[i][j])
                    cols[j].add(board[i][j])
                    blocks[blockId].add(board[i][j])
        return True
            
    def convertRolCol(self, i, j):
        if i in [0, 1, 2]:
            if j in [0, 1, 2]:
                return 0
            elif j in [3, 4, 5]:
                return 1
            else:
                return 2
        elif i in [3, 4, 5]:
            if j in [0, 1, 2]:
                return 3
            elif j in [3, 4, 5]:
                return 4
            else:
                return 5
        else:
            if j in [0, 1, 2]:
                return 6
            elif j in [3, 4, 5]:
                return 7
            else:
                return 8

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不愧是字节出来的,太强了...

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;当然也没指望能来大牛&#xff0c;薪资提供在15K~20k左右&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。 看了简历很多上面都是写有4/5年工作经验&#xff0c;但在面试中&#xff0c;我大为震…

AI智能时代的专有云|百度智能云ABC Stack亮相2023 NAVIGATE 领航者峰会

近日&#xff0c;百度智能云ABC Stack亮相由紫光集团和新华三集团主办的“2023 NAVIGATE 领航者峰会”互联网线上专题论坛。百度智能云私有云部副总经理史磊进行了主题为“百度智能云携手新华三共创互联网新时代”的演讲&#xff0c;分享了百度专有云ABC Stack智算版的技术优势…

Mac环境python + selenium 环境搭建

文章主要讲解Mac环境下如何搭建selenium环境。作者也是测试初学者&#xff0c;对selenium目前是一无所知的状态&#xff0c;希望从搭建环境开始对它逐步了解。 环境准备 本文采用的环境&#xff1a;• Python 3.7.3 PS&#xff1a; Mac环境会默认自带Python环境&#xff0c;但…

chatgpt赋能python:Python如何使用爬虫技术进行网页操作和SEO优化

Python如何使用爬虫技术进行网页操作和SEO优化 随着互联网的快速发展&#xff0c;越来越多的企业开始意识到网站的SEO优化的重要性。在这个过程中&#xff0c;Python作为一种高效的编程语言&#xff0c;在网页操作和SEO优化方面也扮演着举足轻重的角色。本篇文章将简要介绍Pyt…

LuaJIT Bytecode结构布局

一、Bytecode的存储结构 LuaJIT的Bytecode位宽为32位&#xff0c;在parse阶段用结构体BCInsLine表示&#xff0c;ins表示32位长的字字节码指令&#xff0c;line表示字节码的行号&#xff1a; typedef struct BCInsLine {BCIns ins; /* Bytecode instruction. */BC…

React性能优化API

一、常见性能优化API shouldComponentUpdate&#xff1a;通过重写该函数实现组件的条件渲染&#xff0c;即只有在组件的 props 或 state 发生变化时才重新渲染组件。 PureComponent&#xff1a;React 自带的一个纯组件&#xff0c;其 shouldComponentUpdate 函数已经被自动实现…

向量数据库发展迎里程碑时刻!Zilliz Cloud 全新升级:超高性价比,向量数据库唾手可得

随着 Zilliz Cloud[1] 版本全新升级&#xff0c;向量数据库再度迎来里程碑式发展&#xff01; 升级后的 Zilliz Cloud 不仅新增了诸如支持 JSON 数据类型、动态 Schema 、Partition key 等新特性&#xff0c;而且在价格上给出了史无前例的优惠&#xff0c;例如推出人人可免费使…

基于Java网络游戏公司官方平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

p5.js 开发点彩画派的绘画工具

theme: smartblue 本文简介 点赞 关注 收藏 学会了 这几天在整理书柜时看到这套书&#xff0c;看到梵高&#xff0c;想起他的点彩画。 想到点彩画派&#xff0c;不得不提的一个画家叫乔治皮埃尔秀拉。据说梵高也模仿过他的画作。 我引用一下维基百科对点彩画派的解析&#x…

一文读懂功率信号源(信号发生器)

功率信号源是一种用于产生高功率信号的电子设备&#xff0c;它广泛应用于各个领域&#xff0c;在生产、测试和调试中起着重要的作用。下面就让安泰将介绍功率信号源的基本概念、工作原理、分类以及应用。 功率信号源是一种能够产生稳定输出功率的设备。它通常由一个稳压电源和一…

图解LeetCode——200. 岛屿数量

一、题目 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格…

还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

需求 最近写了一个服务&#xff1a;根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则 实现方式&#xff1a; 根据优惠券类型resourceType -> 确定查询哪个数据表 根据编码resourceId -> 到对应的数据表里边查询优惠券的派发方式gran…

MAC卸载深信服edr

一、普通办法 1、首先在应用程序中找到终端防护中心&#xff0c;右键显示原项目。 2、全选删除所有文件&#xff0c;其中有一个sfavtray文件无法删除&#xff0c;这里先删除其他文件&#xff0c;不然底3步结束进程会自动恢复。 3、在活动监视器中查找进程名为sfavtray、edr的进…

DuiLib了解 XML使用和布局控制

文章目录 1、了解 XML使用和布局控制2、内外边距3、浮动4、占位符5、默认样式6、全局字体 1、了解 XML使用和布局控制 通过上一篇的学习我们可以制作一个简单的布局了&#xff0c;但是没有控件的窗口做再好的布局有什么用呀。赶紧找些素材&#xff0c;我们来做一个标准的 Wind…

什么是指标拆解树?指标拆解树怎么做数据分析?

指标拆解树能够通过对指标进行拆解&#xff0c;帮助分析定位影响指标的关键因素。 通过指标拆解树&#xff0c;您可以方便查看各个维度中各个成员对指标的贡献情况和占比&#xff0c;也可以将指标分解到一个或多个维度&#xff0c;分析每个维度对指标的影响。 指标拆解树的数据…

Spring Boot单体应用引入sleuth链路追踪

文章目录 前言一、问题模拟二、引入sleuth链路跟踪1、引入sleuth的maven依赖2、添加属性配置3、logback配置4、日志信息5、通过NewSpan注解声明新的Span 三、引入Sleuth链路跟踪的好处四、Sleuth概念说明五、Logback的MDC特性 前言 最近排查生产环境的异常时发现一个问题&…

Unreal 5 实现丧尸追逐攻击功能

要实现让丧尸能够智能的追逐玩家&#xff0c;我们需要用到ue封装的ai行为树来实现。基础相关的请查看&#xff1a;Unreal Engine 5.1 AI行为树基础入门&#xff0c;来学习一下如何使用ai行为树来实现一个简单的追逐功能。这一篇就是基于这个基础上进行了优化&#xff0c;实现了…

Docker专题系列之十一:基于Docker安装配置Nacos

一、查找镜像 使用如下命令查找镜像库中的资源 docker search nacos二、拉取镜像 拉取最新版本的nacos镜像 docker pull nacos/nacos-server三、查看镜像文件 docker images四、创建本地数据卷目录 mkdir /usr/rdc mkdir /usr/rdc/nacos mkdir /usr/rdc/nacos/logs五、创…

qt_多人聊天

服务器 .pro QT core gui network widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //客户端容器链表 #in…

【SpringMVC】SSM整合

1&#xff0c;SSM整合 前面我们已经把Mybatis、Spring和SpringMVC三个框架进行了学习&#xff0c;今天主要的内容就是把这三个框架整合在一起完成我们的业务功能开发&#xff0c;具体如何来整合&#xff0c;我们一步步来学习。 1. 流程分析 (1) 创建工程 创建一个Maven的web…