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

12. 整数转罗马数字

罗马数字包含以下七种字符: 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。
给你一个整数,将其转为罗马数字。

Swift

解法一:模拟遍历法

列出各种罗马字符对应数字列表
罗马字母和数字对应关系图
注意数字是从高位开始转换,因此从大到小开始遍历数字,每次减去已使用的罗马字母所对应的数字,继续遍历,直至列出所有的罗马数字

func intToRoman(_ num: Int) -> String {//先将各种值列举出来,从大到小排好序let valueSymbols: [[Int:String]] = [[1000:"M"],[900:"CM"], [500:"D"], [400:"CD"], [100:"C"],[90:"XC"], [50:"L"],[40:"XL"],[10:"X"],[9:"IX"],[5:"V"], [4:"IV"], [1:"I"]]var x = num;var result = ""//拿到数值从大到小取,并减去罗马字母对应的值,继续比较for item:[Int:String] in valueSymbols {let value = item.keys.first!let symbol = item.values.first!while x >= value {result += symbol;x = x - value}if x == 0 {break}}return result}

解法二:硬编码数字

观察上述对应关系,可将千百十个位的所有情况列出:
数字在各个位置上时对应的罗马数字

func intToRoman(_ num: Int) -> String {let thounds = ["", "M", "MM", "MMM"]let hundrand = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]let tens = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" ]let ones = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]return thounds[num/1000] + hundrand[num % 1000 / 100] + tens[num%100/10] + ones[num%10]}

OC

解题思路同上。

解法一

- (NSString *)intToRoman:(NSInteger)num {NSArray *valueSymbols = @[@{@1000:@"M"},@{@900:@"CM"},@{@500:@"D"},@{@400:@"CD"},@{@100:@"C"},@{@90:@"XC"},@{@50:@"L"},@{@40:@"XL"},@{@10:@"X"},@{@9:@"IX"},@{@5:@"V"},@{@4:@"IV"},@{@1:@"I"}];NSString *result = @"";for (NSDictionary *dic in valueSymbols) {NSInteger key = [dic.allKeys.firstObject integerValue];NSString *symbol = [dic.allValues.firstObject stringValue];while (num >= key) {result = [result stringByAppendingString:symbol];num -= key;}if (num == 0) {break;}}return result;
}

解法二

- (NSString *)intToRoman:(NSInteger)num {NSArray *thounds = @[@"", @"M", @"MM", @"MMM"];NSArray *hundrand = @[@"", @"C", @"CC", @"CCC", @"CD", @"D", @"DC", @"DCC", @"DCCC", @"CM"];NSArray * tens =@[@"", @"X", @"XX", @"XXX", @"XL", @"L", @"LX", @"LXX", @"LXXX", @"XC" ];NSArray * ones = @[@"", @"I", @"II", @"III", @"IV", @"V", @"VI", @"VII", @"VIII", @"IX"];NSString *result = [[[thounds[num/1000] stringByAppendingString:hundrand[num % 1000 / 100]] stringByAppendingString:tens[num%100/10]] stringByAppendingString:ones[num%10]];return result;
}

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

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

相关文章

LVM异常分析

环境信息 硬件环境 软件环境 相关软件包 云上鲲鹏RH220 操作系统:麒麟V10sp1-0711 系统自带多路径:multipath-tools-0.8.4-6 光纤连接华为存储Oceanstor18500 v5 内核版本:4.19.90 故障描述 云上鲲鹏RH220安装系统麒麟V10sp1-071…

ssm+vue的高校智能培训管理系统分析与设计(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的高校智能培训管理系统分析与设计(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

npm ,yarn 更换使用国内镜像源,阿里源,清华大学源

在平时开发当中,我们经常会使用 Npm,yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的,如果没有梯子的话。会感觉特别特别慢,所以,使用国内的源是非常有必要的。 在这里插入图片描述 Nnpm, yarn …

vue+react题集整理

1.Typescript中 interface 和 type 的差别是什么? interface只能用来描述对象类型 type可以描述任何类型组合 type后边需要有 interface后边没有 当多次使用相同名称定义一个 interface 时,它们会自动合并为一个接口。同名属性的不能进行类型覆盖修改&am…

1130 - Host “WIN-CA4FHERGO9J‘ is not allowed to connect to this MySQL server

1、知识小课堂 1.1 Mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。它是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS (Relational Database Management System&am…

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…

GEE(ccdc)——连续变化检测和分类 (CCDC)概述

连续变化检测和分类 (CCDC) 1 背景 1.1 土地变化监测 土地覆盖变化影响自然和人为环境,被全球气候观测系统视为基本气候变量。例如,荒漠化导致土地覆盖从植物生态系统转变为沙漠,森林砍伐导致森林转变为人类改变的土地用途,城市发展可以将自然环境转变为被建筑物和道路覆…

MVVM和MVC以及MVP的原理以及它们的区别

MVVM、MVC 和 MVP 都是前端架构模式&#xff0c;它们各自有不同的原理和特点。 MVC&#xff08;Model-View-Controller&#xff09; 原理&#xff1a;MVC 将应用程序分为三个部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&a…

antd+vue:tree组件:父级节点禁止选择并不展示选择框——基础积累

antdvue:tree组件&#xff1a;父级节点禁止选择并不展示选择框——基础积累 1.判断哪些是父节点&#xff0c;给父节点添加disabled属性——this.permissionList是数据源2.通过css样式来处理disabled的父节点3.完整代码如下&#xff1a; 最近在写后台管理系统的时候&#xff0c;…

[GXYCTF2019]Ping Ping Ping (文件执行漏洞)

本题考点&#xff1a; 1、命令联合执行 2、命令绕过空格方法 3、变量拼接 1、命令联合执行 ; 前面的执行完执行后面的| 管道符&#xff0c;上一条命令的输出&#xff0c;作为下一条命令的参数&#xff08;显示后面的执行结果&#xff09;|| 当前面的执行出错时&#xff08;为…

从计时器失效到判断页面可见性

目录 1&#xff0c;问题 - 计时器失效2&#xff0c;解决 - 页面可见性判断1&#xff0c;页面可见性2&#xff0c;visibilitychange3&#xff0c;终极解决方案 - lifecycle 3&#xff0c;精准计时 1&#xff0c;问题 - 计时器失效 问题复现&#xff1a;移动端必现&#xff0c;p…

BMS常见名词解释

&#xff08;1&#xff09;阻抗&#xff1a;在具有电阻、电感和电容的电路里&#xff0c;对电路中的电流所起的阻碍作用叫作阻抗。阻抗常用Z表示&#xff0c;是一个复数&#xff0c;实部称为电阻&#xff0c;虚部称为电抗。电容在电路中对交流电所起的阻碍作用称为容抗 ,电感在…

C#winform实现单页面自由切换窗口

一、介绍 这是效果图&#xff0c;由于视频压缩画质很差&#xff0c;看个效果就好。 左侧是打开界面的按钮&#xff0c;点击左侧按钮右侧打开不同窗口&#xff0c;点击右侧窗口中的按钮&#xff0c;也可以切换页面&#xff0c;可以方便的进行返回、下一页等操作。 每个窗口打开…

JavaSE语法之七:封装

文章目录 一、封装的概念二、访问限定符三、封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 常见的包 四、实现封装五、static成员1. 再谈学生类成员变量2. static修饰成员变量3. static修饰成员方法4. static成员变量初始化 六、代码块1. 代码块概念及其分类2. 普通代码…

香槟过了保质期还能喝吗?

香槟是起泡酒的高级代表&#xff0c;是浪漫和喜庆的化身&#xff0c;它浑身上下都散发着无穷的魅力。那么&#xff0c;这么精贵的葡萄酒有没有保质期&#xff0c;会不会变质呢&#xff1f;云仓酒庄的品牌雷盛红酒分享当然会。一瓶酒的生命离不开它的保存期限&#xff0c;酒的质…

理解Socket

前言 我在去年就学习过Java中Socket的使用&#xff0c;但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍&#xff0c;看完还是不太理解到底什么是Socket&#xff0c;还是很迷。直到最近在学习计算机网络&#xff0c;我才对Socket有了一个更深地理解。之前一…

HBuilder X

选择一款编程软件有以下几个好处&#xff1a; &#xff08;1&#xff09;提高效率&#xff1a;编程软件通常强调代码编辑和自动完成&#xff0c;可以帮助程序员更快速、更准确地输入代码。 &#xff08;2&#xff09;降低错误率&#xff1a;编程软件还可以检测代码中的错误&a…

spring事务(3)基于XML的声明式事务

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Canvas学习笔记

2023.12.15 按照官方的文档安装production&#xff0c;安装了Ubuntu 20.04.6 LTS服务器版。安装过程比较顺利&#xff0c;除了git clone试了多次才成功。 官方安装文档安装node.js有一处错误&#xff0c; 正确的命令是&#xff1a; curl -sL https://deb.nodesource.com/se…

hive中如何求取中位数?

目录 中位数的概念代码实现准备数据实现 中位数的概念 中位数&#xff08;Median&#xff09;又称中值&#xff0c;统计学中的专有名词&#xff0c;是按顺序排列的一组数据中居于中间位置的数&#xff0c;代表一个样本、种群或概率分布中的一个数值&#xff0c;其可将数值集合…