力扣题目学习笔记(OC + Swift) 13. 罗马数字转整数

罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

分析:
正常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。
例如 XXVII 可视作 X+X+V+I+I=10+10+5+1+1==27。
特殊情况只需要考虑:
“当前位置的元素比下个位置的元素小,就减去当前值”

结论:当前位置的元素比下个位置的元素小,就减去当前值,否则加上当前值

Swift

func romanToInt(_ s: String) -> Int {let symbols:[Character: Int] = ["I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000]var result: Int = 0;let n = s.countfor i in 0..<n {let symbol:Character = s[s.index(s.startIndex, offsetBy: i)]let value:Int = symbols[symbol]!if i<n-1 && value < symbols[s[s.index(s.startIndex, offsetBy: i+1)]]! {result -= value}else {result += value}}return result}

OC

- (NSInteger)romanToInt:(NSString *)s {NSDictionary *symbols = @{@"I":@1,@"V":@5,@"X":@10,@"L":@50,@"C":@100,@"D":@500,@"M":@1000};NSInteger result = 0;NSInteger len = s.length;for (NSInteger i=0; i<len; i++) {NSInteger value = [symbols[[s substringWithRange:NSMakeRange(i, 1)]] integerValue];if (i<len-1 && value < [symbols[[s substringWithRange:NSMakeRange(i+1, 1)]] integerValue]) {result -= value;}else {result += value;}}return result;
}

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

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

相关文章

5252D 5G基站测试仪

01 5252D 5G基站测试仪 产品综述&#xff1a; 5252D多通道综测仪打破了信号发生器进行信号发射、频谱分析仪进行观看频域波形的测试方案&#xff0c;将信号收发融为一体&#xff0c;推动无线通信测试进入全新时代。其独具的多通道收发一体、高性能、全方位测试能力及直观操作…

凯斯西储大学轴承数据解读

文章目录 一、凯斯西储大学轴承数据基础知识&#xff1f;1.1 故障种类1.2 故障点尺寸&#xff08;单点故障&#xff09;1.3 载荷和转速 二、数据解读2.1 文件2.2 以12k Drive End Bearing Fault Data为例2.3 以&#xff08;0.007&#xff0c;inner race)为例。 3 Normal Baseli…

爬虫scrapy管道的使用

爬虫scrapy管道的使用 学习目标&#xff1a; 掌握 scrapy管道(pipelines.py)的使用 之前我们在scrapy入门使用一节中学习了管道的基本使用&#xff0c;接下来我们深入的学习scrapy管道的使用 1. pipeline中常用的方法&#xff1a; process_item(self,item,spider): 管道类中…

计算机组件操作系统BIOS的相关知识思维导图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、运维实施工程师需要具备的知识 1、运维工程师、实施工程师是啥&#xff1f; 2、运维工程师、实施工…

whisper深入-语者分离

文章目录 学习目标&#xff1a;如何使用whisper学习内容一&#xff1a;whisper 转文字1.1 使用whisper.load_model()方法下载&#xff0c;加载1.2 使用实例对文件进行转录1.3 实战 学习内容二&#xff1a;语者分离&#xff08;pyannote.audio&#xff09;pyannote.audio是huggi…

基于ETM+遥感数据的城市热岛效应现状研究的解决方案

1.引言 城市热岛效应&#xff08;Urban Heat Island Effect&#xff09;是指城市中的气温明显高于外围郊区的现象。在近地面温度图上&#xff0c;郊区气温变化很小&#xff0c;而城区则是一个高温区&#xff0c;就像突出海面的岛屿&#xff0c;由于这种岛屿代表高温的城市区域&…

Android ViewPager实现下载当前页面ImageView的Bitmap图片

一 问题背景 经常会有画廊组件需要在当前展示给用户的页面进行下载功能。一般情况下下载按钮的UI曾经是和ViewPager同级的&#xff0c;而不是作为ViewPager中adapter对应的item一部分。 因此知道当前展示给用户的item页面及其bitmap在用户点击下载按钮时的处理&#xff0c;显…

20、清华、杭州医学院等提出:DA-TransUNet,超越TranUNet,深度医学图像分割框架的[皇帝的新装]

前言&#xff1a; 本文由清华电子工程学院、杭州医学院、大阪大学免疫学前沿研究所、日本科学技术高等研究院信息科学学院、东京法政大学计算机与信息科学专业共同作者&#xff0c;于2023年11月14号发表于arXiv的《Electrical Engineering and Systems Science》期刊。 论文&…

MongoDB与大数据处理:构建高性能分布式数据库

MongoDB是一种非关系型数据库&#xff0c;具有高度灵活性和可扩展性。在处理大量数据时&#xff0c;索引的优化是提升查询性能的关键。下面将介绍一些MongoDB索引优化的指南&#xff0c;帮助用户更好地利用索引来提高查询性能。 一、选择适当的索引类型 1、单字段索引&#xf…

15.动态规划:数据结构优化DP

数据结构优化DP有前缀和、滑动窗口、树状数组、线段树、单调栈、单调队列 文章目录 树状数组优化DP[300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/)【值域树状数组】[2926. 平衡子序列的最大和](https://leetcode.cn/problems/maximum-b…

Go项目快速集成Swagger UI

swag Swag将Go的注释转换为Swagger2.0文档。我们为流行的 Go Web Framework 创建了各种插件&#xff0c;这样可以与现有Go项目快速集成&#xff08;使用Swagger UI&#xff09;。 目录 快速开始支持的Web框架如何与Gin集成格式化说明开发现状声明式注释格式 通用API信息API操…

MySQL实战45讲课后问题

1、第一章 如果表T中没有字段k&#xff0c;而你执行了这个语句 select *fromTwhere k1, 那肯定是会报“不存在这个列”的错误&#xff1a; “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢&#xff1f; 解答&#xff1a;…

网线的制作集线器交换机路由器的配置--含思维导图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 一、网线的制作 1、网线的材料有哪些&#xff1f; 网线 网线是一种用于传输数据信号的电缆&#xff0c;广泛应…

学生党评测FreeBuds SE 2,华为最便宜的TWS耳机体验如何?

华为最便宜的百元价位TWS耳机——FreeBuds SE 2值得入手吗&#xff1f;学生党实际使用一个多月&#xff0c;今天从个人主观使用感受来展开说说它的优缺点&#xff0c;如果说你正在观望要不要入手这款耳机&#xff0c;希望可以帮到你。 优点一&#xff1a;超长续航 对于我这种…

JMM的内存可见性保证

Java程序的 内存可见性保证 可以分为下列3类 1&#xff09;单线程程序 单线程程序不会出现内存可见性问题。 编译器、runtime、处理器会共同确保单线程程序的执行结果与该程序在顺序一致性模型中的执行结果相同。 2&#xff09;正确同步的多线程程序 Further Reading &…

YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)

一、本文介绍 本文给大家带来的改进机制是HAttention注意力机制&#xff0c;混合注意力变换器&#xff08;HAT&#xff09;的设计理念是通过融合通道注意力和自注意力机制来提升单图像超分辨率重建的性能。通道注意力关注于识别哪些通道更重要&#xff0c;而自注意力则关注于图…

Redis cluster集群设置密码

Redis cluster集群设置密码 1 备份数据 # 链接redis集群,执行rdb快照 bgsave # 备份dump.rdb文件 cp /data/redis/cluster/dump.rdb /data/redis/cluster/backup/dump.rdb.202312202 设置密码 必须保证每个节点的密码保持一致&#xff0c;不然 Redirected 的时候会失败 2.1…

C : DS二叉排序树之删除

Description 给出一个数据序列&#xff0c;建立二叉排序树&#xff0c;并实现删除功能 对二叉排序树进行中序遍历&#xff0c;可以得到有序的数据序列 Input 第一行输入t&#xff0c;表示有t个数据序列 第二行输入n&#xff0c;表示首个序列包含n个数据 第三行输入n个数据…

Python 元组完全指南 1

元组用于在单个变量中存储多个项目。 mytuple ("apple", "banana", "cherry") 元组是 Python 中的 4 种内置数据类型之一&#xff0c;用于存储数据集合&#xff0c;另外还有列表、集合和字典&#xff0c;它们都具有不同的特性和用途。元组是有…

分布式锁解决方案之数据库乐观锁实现的分布式锁

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 分布式锁解决方案之数据库乐观锁实现的分布式锁 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目…