leetcode12:整数转罗马数字

news/2024/10/30 19:27:44/

题目表述:

罗马数字包含以下七种字符: 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.
 

提示:

1 <= num <= 3999

解题思路:

        因为罗马数字有I、V、X、L等可形成1、5、10等整数,所以我们可以将罗马数字可以简单形成的数保存在数组path中,用哈希映射(key-value)的方法把各个数字对应的罗马数字保存下来,将num从path数组末尾开始遍历,遇到大的数进行除法运算,将对应的罗马数字加到st上,剩余的num进行下一次for循环。

解题代码:

class Solution {
public:string intToRoman(int num) {vector<int>path;path.push_back(1000);path.push_back(900);path.push_back(500);path.push_back(400);path.push_back(100);path.push_back(90);path.push_back(50);path.push_back(40);path.push_back(10);path.push_back(9);path.push_back(5);path.push_back(4);path.push_back(1);unordered_map<int,string>mp;mp[1000]="M";mp[900]="CM";mp[500]="D";mp[400]="CD";mp[100]="C";mp[90]="XC";mp[50]="L";mp[40]="XL";mp[10]="X";mp[9]="IX";mp[5]="V";mp[4]="IV";mp[1]="I";string s;for(int i=0;i<path.size();i++){int carry=num/path[i];num=num-carry*path[i];while( carry!=0){s+=mp[path[i]];carry--;}}return s;}
};


http://www.ppmy.cn/news/21411.html

相关文章

你说反射有点难追,我觉得应该知难而退。

文章目录问题源码解析溯源问题解决方案第一种&#xff1a;第二种&#xff1a;第三种&#xff1a;问题 今天小伙伴遇到一个问题&#xff0c;有关于反射的&#xff0c;写个demo&#xff0c;大家看一下。 如上&#xff0c;运行之后会报错&#xff1a;出现了非法参数。 Exception…

【SpringBoot】官方表达式语言SPEL(Spring Expression Language)全方位学习

文章目录SpEL是什么运算符算数运算符&#xff08;Arithmetic&#xff09;关系运算符&#xff08;Relational&#xff09;逻辑运算符&#xff08;Logical&#xff09;条件运算符&#xff08;Conditional&#xff09;正则运算符&#xff08;Regex&#xff09;访问List或Map对象使…

字节跳动青训营--前端day5

文章目录前言一、初识HTTP拓展—输入地址到页面渲染发生了哪些事情二、协议分析1.发展2.报文2.1 请求报文&#xff1a;请求行&#xff1a;请求头主体2.2 响应报文&#xff1a;状态行响应头响应正文2.3缓存3.发展3.1 Http23.2 Https前言 仅以此文章记录学习历程 一、初识HTTP …

linux 下ARC的中断机制

linux 下ARC的中断机制 一、Idu 中断控制器初始化 Idu 是arc 处理器内部中断控制模块&#xff0c; 类似于arm 内部的gic 中断控制模块 首先&#xff0c;Idu中断控制器在初始化时, 会解析DTS信息中定义了几个idu控制器&#xff0c;每个Idu控制器注册一个struct irq_domain数据…

洛谷 P2983 [USACO10FEB]Chocolate Buying S

这题其实不难&#xff0c;但时间复杂度是大难点 题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Store features N (1 < N < 100,000) kinds of chocolate in essentially unlimited quantities. Each type i o…

力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数组、 977. 有序数组的平方

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数…

高阶导数——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是高阶导数&#xff0c;在这之前&#xff0c;我们学习了导数的概念和函数的求导法则&#xff0c;那么今天&#xff0c;就让我们一起进入高阶导数的世界吧 一、高阶导数的定义 二、高阶导数的计算 1.直接法 2.间…

C语言---选择排序和堆排序

文章目录前言一、简单选择排序1.简介2.算法思路3.代码实现二、堆排序1.简介2.算法思路3.代码实现总结前言 堆排序是选择排序的一种&#xff0c;今天我们讲解一下堆排序和简单选择排序 一、简单选择排序 1.简介 选择排序&#xff08;Selection sort&#xff09;是一种简单直观…