LeetCode 36. 有效的数独

有效的数独

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

一次遍历法

有效数独的三个条件:
1.同一个数字在每一行只能出现一次;
2.同一个数字在每一列只能出现一次;
3.同一个数字在每一个小九宫格只能出现一次。

去重类问题,我们想到了哈希表的使用,如何结合起来呢?
我们首先考虑行数据,每行有个哈希表,记录了该行中数字出现的频率,数据可组织为:rows = [[key:val]],
由于数独中的数字范围是1到9,因此可以使用数组代替哈希表进行计数,数据可组织为:rows = [[Int]],减少复杂度。
同理,列数据可得

那么小九宫有何规律呢?
仔细观察发现,9x9 分块后变成了3x3,那么小九宫格的索引自然就是 i/3, j/3,此处记录数据的数组容量仍然为9
数据用三维数组形式表示为:subboxes = [[[Int]]]

复杂度分析
时间复杂度:O(1),注意,由于遍历了9x9 = 81次,常量级别的,因此时间复杂度为O(1)
空间复杂度:O(1),占用了常量空间用来记录变量

Swift

func isValidSudoku(_ board: [[Character]]) -> Bool {var rows:[[Int]] = Array(repeating: Array(repeating: 0, count: 9), count: 9)var columns = Array(repeating: Array(repeating: 0, count: 9), count: 9)var subboxes = Array(repeating: Array(repeating: Array(repeating: 0, count: 9), count: 3), count: 3)for i in 0..<9 {for j in 0..<9 {let c = board[i][j]if c != "." {let index:Int = c.wholeNumberValue! - 1rows[i][index] += 1columns[j][index] += 1subboxes[i/3][j/3][index] += 1;if rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i/3][j/3][index] > 1 {return false}}}}return true}

OC

- (BOOL)isValidSudoku:(NSArray *)board {NSMutableArray *rows = [NSMutableArray arrayWithCapacity:9];for (NSInteger i=0; i<9; i++) {NSMutableArray *itemArr = [NSMutableArray array];for (NSInteger j=0; j<9; j++) {[itemArr addObject:@(0)];}[rows addObject:itemArr];}NSMutableArray *columns = [NSMutableArray arrayWithCapacity:9];for (NSInteger i=0; i<9; i++) {NSMutableArray *itemArr = [NSMutableArray array];for (NSInteger j=0; j<9; j++) {[itemArr addObject:@(0)];}[columns addObject:itemArr];}NSMutableArray *subbox = [NSMutableArray arrayWithCapacity:3];for (NSInteger i=0; i<3; i++) {NSMutableArray *itemArr = [NSMutableArray array];for (NSInteger j=0; j<3; j++) {NSMutableArray *subItemArr = [NSMutableArray array];for (NSInteger k=0; k<9; k++) {[subItemArr addObject:@(0)];}[itemArr addObject:subItemArr];}[subbox addObject:itemArr];}for (NSInteger i=0; i<9; i++) {for (NSInteger j=0; j<9; j++) {NSString *c = board[i][j];if (![c isEqualToString:@"."]) {NSInteger idx = [c integerValue];rows[i][idx] = @([rows[i][idx] integerValue] + 1);columns[j][idx] = @([columns[j][idx] integerValue] + 1);subbox[i/3][j/3][idx] = @([subbox[i/3][j/3][idx] integerValue] + 1);if ([rows[i][idx] integerValue] > 1 || [columns[j][idx] integerValue] > 1 ||[subbox[i/3][j/3][idx] integerValue] > 1) {return NO;}}}}return YES;
}

OC 代码又臭又长,大家有没有好的优化建议呢?

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

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

相关文章

如何有效使用360评估

导语&#xff1a;360度评估是绩效考核方法之一&#xff0c;被评估者不仅可以从自己、上司、部属、甚至顾客处获得多种角度的反馈&#xff0c;也可从这些不同的反馈清楚地认识到自己的不足、长处与发展需求。但360度评估也有其适用的范围和条件&#xff0c;华为总裁任正非给出了…

抽丝剥茧设计模式-目录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 01 设计模式前言-设计模式源码02 Singleton单例03 Strategy策略04 FactoryMethod工厂方法-AbstractFactory抽象工厂05 Facade门面-Mediator调停者06 Decorator装饰器…

impala元数据自动刷新

一.操作步骤 进入CM界面 > Hive > 配置 > 搜索 启用数据库中的存储通知(英文界面搜索&#xff1a;Enable Stored Notifications in Database)&#xff0c;并且勾选&#xff0c;注意一定要勾选&#xff0c;配置后面的配置不生效。数据库通知的保留时间默认为2天&#…

Nacos下载与安装【windows】

&#x1f95a;今日鸡汤&#x1f95a; 我不知将去何方&#xff0c;但我已经在路上。 ——宫崎骏《千与千寻》 目录 &#x1f95e;1.Nacosdi地址 &#x1f32d;2.GitHub下载 &#x1f37f;3.目录结构 &#x1f953;4.启动nacos &#x1f9c2;5.客户端登陆 &#x1f9c8…

GitHub 一周热点汇总第5期(2024/01/07-01/13)

GitHub一周热点汇总第5期 (2024/01/07-01/13)&#xff0c;梳理每周热门的GitHub项目&#xff0c;这一周的热门项目都普遍比较年轻&#xff0c;有几个更是刚刚发布就火热起来了&#xff0c;一起来看看都有哪些项目吧。 #1 llm-course 项目名称&#xff1a;llm-course - 大语言…

华为路由器OSPF动态链路路由协议配置

R1配置 interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.252 interface LoopBack0ip address 1.1.1.1 255.255.255.255 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 10.1.12.0 0.0.0.3 R2配置 interface GigabitEthernet0/0/0i…

特征工程-特征处理(一)

特征处理-&#xff08;离散型特征处理&#xff09; 完成特征理解和特征清洗之后&#xff0c;我们要进行特征工程中最为重要和复杂的一步了——特征处理 离散型特征处理 离散型特征通常为非连续值或以字符串形式存在的特征&#xff0c;离散型特征通常来讲是不能直接喂入模型中…

四川云汇优想教育咨询有限公司引领电商未来

四川云汇优想教育咨询有限公司&#xff0c;一家在电商服务领域崭露头角的领军企业&#xff0c;致力于为广大客户提供最优质、最全面的电商服务。作为业界翘楚&#xff0c;云汇优想凭借其卓越的服务品质和强大的技术实力&#xff0c;在激烈的市场竞争中独树一帜&#xff0c;赢得…

营业厅神秘顾客调查内容

本文由群狼调研&#xff08;长沙神秘顾客调研公司&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。营业厅神秘顾客调查的内容可以包括以下方面&#xff1a; 1.服务质量评估&#xff1a;评估员工的服务态度、专业知识和沟通能力。观察员工对顾客的响应时间、礼貌程…

Nginx 配置一级和二级证书以及作为静态资源服务器

Nginx 配置一级和二级证书以及作为静态资源服务器 Docker 启动 nginx 容器 version: 3 services:root-nginx:restart: alwayscontainer_name: root-nginximage: nginx:latestports:- 443:443volumes:- /path/ssl:/etc/nginx/conf.d/ssl- ./conf.d/default.conf:/etc/nginx/co…

将WAP网站封装成App体验的全新策略

一、传统的App封装方式 传统的App封装技术通常依赖于WebView组件&#xff0c;将WAP内容嵌入到一个原生App框架中。这种方法虽然可以快速实现WAP到App的转换&#xff0c;但存在着明显的缺陷&#xff1a;首先&#xff0c;WebView的性能和用户体验都无法与原生组件相提并论&#x…

金蝶云星空与金蝶云星空对接集成逐个单据查询连通员工新增(3009-销售退货清理卡片)

金蝶云星空与金蝶云星空对接集成逐个单据查询连通员工新增(3009-销售退货清理卡片) 来源系统:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人…

【TC3xx芯片】TC3xx芯片电源管理系统PMS详解

目录 前言 正文 1.供电模式选择&#xff08;Supply Mode Selection&#xff09; 1.1 供电域 1.2 供电模式 1.3 供电阈值 1.4 供电上升和下降行为Supply Ramp-up and Ramp-down Behavior 1.5 EVRC产生供电 2. 电源监控 2.1 电源监控原理 2.2 Primary低电压监控 2.3 …

C++六大组件之一:仿函数

场景一&#xff1a; 与其过多叙述定义&#xff0c;不如在下面一个场景中来理解仿函数&#xff1a; #include<iostream> using namespace std; template<class T> void bubbles_sort(T* arr,int size) //冒泡排序 {for (int i 0; i < size - 1; i){for (int j…

Android系统启动-Zygote详解(Android 14)

一、什么是Zygote 在上一篇文章Android系统启动-init进程详解&#xff08;Android 14&#xff09;中&#xff0c;分析了init进程&#xff0c;在init进程启动的第二阶段会解析init.*.rc文件&#xff0c;启动多个进程&#xff0c;其中包括Zygote。 Zygote又叫孵化器&#xff0c…

SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!

SSM整合 1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properties步骤8:创建SpringMVC配置类步骤9:创建Web项目入口配…

关于@KafkaListener动态订阅消费topic的调研

KafkaListener注解监听和消费kafka的代码通常如下&#xff1a; KafkaListener(topics "#{${topics}.split(,)}") public void onMessage(List<ConsumerRecord<String, String>> records) {try {final List<String> msgs records.stream().map(C…

部署 LVS-DR 群集

本章内容&#xff1a; -了解LVS-DR群集的工作原理 -会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR &#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一 种工作模式。 2.1.1 &#xff0e; LVS-DR 工作原理 …

Idea Community社区版,新建module不使用maven archetype

最近使用 idea 社区版&#xff0c;新建module时始终要选择maven archetype&#xff0c;如下图&#xff1a; 后来发现需要手动切换左侧的菜单栏&#xff0c;在"New Module"上点击一下&#xff0c;就可以了&#xff1a; 记录一下&#xff0c;方便以后查阅

模板设计模式-实例

在软件开发中&#xff0c;有时也会遇到类似的情况&#xff0c;某个方法的实现需要多个步骤&#xff08;类似“请客”&#xff09;&#xff0c;其 中有些步骤是固定的&#xff08;类似“点单”和“买单”&#xff09;&#xff0c;而有些步骤并不固定&#xff0c;存在可变性&…