当前位置:网站首页>leetcode 12. 整数转罗马数字
leetcode 12. 整数转罗马数字
2022-08-04 04:37:00 【_刘小雨】
作者简介:C/C++ 、Golang 领域耕耘者,创作者
个人主页:作者主页
活动地址:CSDN21天学习挑战赛
题目来源: leetcode官网
如果感觉博主的文章还不错的话,还请关注 、点赞 、收藏🧡三连支持一下博主哦~~~
题目描述
罗马数字包含以下七种字符: 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。
给你一个整数,将其转为罗马数字。
示例1:
输入: num = 3
输出: “III”
示例2:
输入: num = 4
输出: “IV”
示例3:
输入: num = 9
输出: “IX”
示例4:
输入: num = 58
输出: “LVIII”
解释: L = 50, V = 5, III = 3.
示例5:
输入: num = 1994
输出: “MCMXCIV”
解释: M = 1000, CM = 900, XC = 90, IV = 4.
🧡 算法分析
此题是模拟题
首先是基本的罗马数字统计(下图中的上方表格)
我们可以得到一些规律,
- 相同的数字连写,所表示的数等于这些数字相加得到的数,如:III=3;
- 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如:VIII=8, XII=12;
- 小的数字在大的数字的左边(限于 IV、IX、XL、XC、CD和CM),所表示的数等于大数减小数得到的数,如:IV=4, IX=9;
- 正常使用时,连写的数字重复不得超过三次;
所以我们可以用新的组合字符代表新的单位, 上图中的下方表格
模拟实现步骤:
- 先整理出来新的单位和数值数组
- 直接对需要转化的数字进行循环遍历即可(开始优先选择较大的单位)
代码实现
class Solution {
public:
string intToRoman(int num) {
// 属于模拟题
int vals[] = {
1000,
900,500,400,100,
90,50,40,10,
9,5,4,1
};
string reps[] = {
"M",
"CM", "D", "CD", "C",
"XC", "L", "XL", "X",
"IX", "V", "IV", "I"
};
string re;
// 先选择大单位
for(int i = 0; i < 13; i++) // 因为上面数组里面有13个数
{
while(num >= vals[i])
{
num -= vals[i];
re += reps[i];
}
}
return re;
}
};
执行结果:
时间复杂度分析
计算量与最终罗马数字的长度成正比,对于每一位阿拉伯数字,罗马数字最多用4个字母表示(比如VIII=8),所以罗马数字的长度和阿拉伯数字的长度是一个数量级的,而阿拉伯数字的长度与位数成正比,是 O(logn)
,因此时间复杂度是 O(logn)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
🧡 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
- How to keep the source code confidential in the development under the burning scenario
- 【id类型和NSObject指针 ObjectIve-C中】
- Implementing a server-side message active push solution based on SSE
- [21 Days Learning Challenge] Image rotation problem (two-dimensional array)
- 大型连锁百货运维审计用什么软件好?有哪些功能?
- 如何简化现代电子采购的自动化?
- 嵌入式数据库开发编程MySQL(全)
- [Skill] Using Sentinel to achieve priority processing of requests
- 技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris
- 中信证券网上开户怎么开的?安全吗?
猜你喜欢
八年软件测试工程师带你了解-测试岗进阶之路
8. Haproxy builds a web cluster
什么是数字孪生智慧城市应用场景
sql语句查询String类型字段小于10的怎么查
3000 words, is take you understand machine learning!
Explain detailed explanation and practice
The Shell function
Converts XML tags to TXT format (voc conversion for yolo convenient training)
小程序 + 电商,玩转新零售
3000字,一文带你搞懂机器学习!
随机推荐
元宇宙“吹鼓手”Unity:疯狂扩局,悬念犹存
Jenkins 导出、导入 Job Pipeline
外卖店优先级
Functions, recursion and simple dom operations
TL431的基本特性以及振荡电路
Explain detailed explanation and practice
怎么把elastic中的异常登录ip和日志自动导出或抓取到数据库中?
Introduction and application of go module
初识Numpy
2022 software test interview questions The latest ByteDance 50 real interview questions, 15k have been won after brushing, with explanation + Q&A
7-2 LVS+DR Overview and Deployment
深度学习之 10 卷积神经网络3
XSS相关知识点
3000 words, is take you understand machine learning!
7-1 LVS+NAT 负载均衡群集,NAT模式部署
某母婴小程序加密参数解密
if,case,for,while
2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
Basic characteristics of TL431 and oscillator circuit
FFmpeg —— 录制麦克风声音(附源码)