算法: 将整数转换为罗马数字12. Integer to Roman

chatgpt/2023/9/27 6:53:17

12. Integer to Roman

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

For example, 2 is written as II in Roman numeral, just two one’s added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

  • I can be placed before V (5) and X (10) to make 4 and 9.
  • X can be placed before L (50) and C (100) to make 40 and 90.
  • C can be placed before D (500) and M (1000) to make 400 and 900.

Given an integer, convert it to a roman numeral.

Example 1:

Input: num = 3
Output: "III"
Explanation: 3 is represented as 3 ones.

Example 2:

Input: num = 58
Output: "LVIII"
Explanation: L = 50, V = 5, III = 3.

Example 3:

Input: num = 1994
Output: "MCMXCIV"
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

Constraints:

  • 1 <= num <= 3999

字典遍历解法

class Solution:def intToRoman(self, num: int) -> str:# 定义字典,映射罗马字符和对应的值dic = {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'}# 初始化结果列表res = []# 遍历字典中的每个值-符号对for value, symbol in dic.items():# 如果num为0,跳出循环if num == 0:break# 用当前的value去除num,并获取商和余数# 商表示当前value可以完全覆盖num的次数,余数表示剩余的部分count, num = divmod(num, value)# 将当前的符号重复count次,并添加到结果列表res.append(symbol * count)# 将结果列表中的字符串连接起来,返回return ''.join(res)

复杂度分析如下:

时间复杂度:我们只需要遍历一次罗马数字的符号字典,其中包含13个元素。所以时间复杂度是 O(1)。尽管我们在每次迭代中都会执行乘法和字符串连接操作,这两种操作的复杂度都是 O(k),其中 k 是需要重复的次数。但是总体上看,k 的最大值并不大(最大为 3,对应于 “III”、“XXX”、“CCC”、“MMM”),所以可以认为时间复杂度是常量的。

空间复杂度:我们使用了一个固定大小的字典和一个结果列表。结果列表的长度最多为15(考虑到数字1994,对应的罗马数字为 “MCMXCIV”,长度为7),所以空间复杂度也是 O(1)。

Python中的 join() 方法

Python中的 join() 方法是一个字符串方法,它用于将序列中的元素以特定的字符连接生成一个新的字符串。

在代码 ‘’.join(res) 中,join() 方法用于连接序列 res 中的元素,其中的 ‘’(空字符串)表示连接的字符。也就是说,这个方法将 res 列表中的所有元素连接起来,元素之间没有任何字符。

假设我们有以下的列表:

res = ['M', 'CM', 'XC', 'IV']

如果我们执行 ‘’.join(res),我们会得到:

'MCMXCIV'

join() 方法是一个非常有用的工具,特别是当我们需要将一个字符串列表组合成一个单一的字符串时。它比使用 + 操作符进行字符串连接更有效率,尤其是在处理大型字符串列表时。

divmod() 是一个内置的 Python 函数

divmod() 是一个内置的 Python 函数,用于一次性执行除法和取余操作。它接受两个参数:被除数和除数,然后返回一个元组,其中第一个元素是商,第二个元素是余数。

这是一个简单的例子:

quotient, remainder = divmod(10, 3)
print("Quotient: ", quotient)  # 输出:Quotient: 3
print("Remainder: ", remainder)  # 输出:Remainder: 1

在这个例子中,我们使用 divmod() 函数将 10 除以 3,得到的商是 3,余数是 1。divmod() 函数返回了一个元组 (3, 1),我们通过元组解包,将商和余数分别赋值给 quotient 和 remainder。

使用 divmod() 函数比分别使用除法和模运算符更有效率,因为它只进行一次除法操作。如果你在写的代码中需要同时得到商和余数,那么使用 divmod() 函数是一个很好的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

Openlayers实战:绘制多边形,导出CSV文件

CSV(Comma-Separated Values)是一种常用的数据交换格式,是一种纯文本文件格式。在Openlayers的交互中,经常性的我们要导出一些数据,在这个实战中,演示的是导出CSV文件。 安装依赖 npm install file-saver --save npm install papaparse --save 效果图 导出的文件 源代码…

[操作系统] 进程的详细认识----从概念到调度

目录 前言 一.进程的概念 二.进程和程序之间的关系 2.1二者的关系 2.2资源的占用 三.进程的任务 四.进程的管理 五.PCB中的信息 5.1pid进程标识 5.2内存指针 5.3文件描述符表 六.进程的调度 6.1CPU的简单认识 6.2调度的方式 6.3PCB中调度相关属性 七.进程的…

Java基础篇_1.2——保留关键字、基本数据类型、基本数据类型之间的转换

​​​​​​​目录 一、保留关键字 二、Java的基本数据类型 三、引用数据类型 四、基本数据类型间的转换 隐含强制类型转换 一、保留关键字 Java该语言是用 Unicode 字符集编写的。 Java关键字是预先定义的具有特别意义的标识符&#xff0c;也被称为Java保留字&#xff0…

Springer独立出版 | 2023年触觉与虚拟现实国际会议(ICHVR 2023)

会议简介 Brief Introduction 2023年触觉与虚拟现实国际会议(ICHVR 2023) 会议时间&#xff1a;2023年12月15日-17日 召开地点&#xff1a;中国北海 大会官网&#xff1a;www.ichvr.org 2023年触觉与虚拟现实国际会议(ICHVR 2023)由东南大学、上海交通大学联合主办&#xff1b;…

kotlin 编写一个简单的天气预报app(四)增加界面显示

编写界面来显示返回的数据 用户友好性&#xff1a;通过界面设计和用户体验优化&#xff0c;可以使天气信息更易读、易理解和易操作。有效的界面设计可以提高用户满意度并提供更好的交互体验。 增加城市名字的TextView <TextViewandroid:id"id/textViewCityName"…

Ansible的应用

Ansible简介 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机…

微信小程序开发学习之--地图绘制行政区域图

不知道大家有没有感觉就是在做微信小程序地图功能时刚刚接触时候真的感觉好迷茫呀&#xff0c;文档看不懂&#xff0c;资料找不到&#xff0c;就很难受呀&#xff0c;比如我现在的功能就想想绘制出一个区域的轮廓图&#xff0c;主要是为了显眼&#xff0c;效果图如下&#xff1…

无涯教程-jQuery - outerWidth( margin])方法函数

outerWidth([margin])方法获取第一个匹配元素的外部宽度(默认情况下包括边框和填充)。 此方法适用于可见和隐藏元素。由于父项被隐藏的元素不支持此功能。 outerWidth( [margin] ) - 语法 selector.outerWidth( [margin] ) 这是此方法使用的所有参数的描述- margin - 此…
推荐文章