[Leetcode] Interger to roman 整数转成罗马数字
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
题意:将整数转换成罗马数字,这里就需要对什么是罗马数字有一些了解。一下部分摘选于百度百科。
计数方法:

1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:III=3;
2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如:VIII=8、XII=12;
3)小的数字(限于I、X、和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:IV=4、IX=9;
4)正常使用时,连写的数字重复不得超过三次;
5)在一个数的上面画一条横线,表示这个数扩大1000倍。
组数规则:
1)基本数字I、X、C中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能一个;
2)不能把基本数字V、L、D中的任何一个座位小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目只能用一个;
3)V和X的左边的小数子只能用I;
4)L和C的左边小数字只能用X;
5)D和M左边的小数字只能用C;
规则3~5可以理解为,放在左边的小数字只能是同一级别,额,好吧,具体含义得自己体会。
方法一:题中给出了整数的范围, 用罗马数字给出各个数字对应的表现形式,用二维向量表示。值得注意的是 “” 的位置,求罗马数字的过程可以表示为从个位、十位、百位、千位一步步的计算,在返回值res的求值中,+两段的顺序不能颠倒。代码如下:
class Solution {
public:
string intToRoman(int num)
{
vector<vector<string>> strR=
{
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "M", "MM", "MMM"}
};
string res="";
int row=;
while(num !=)
{
int col=num%;
res=strR[row][col]+res; //注意顺序
row++;
num/=;
}
return res;
}
};
方法二:参考Grandyang的博客,使用贪婪算法的解法。建立表格,每次通过查找当前最大的数,减去在查找。和上面解法的区别在于,上面是将每个数量级上的整数一次性转成罗马数字,这个是有点像用天平秤东西一样,从大到小的一个个试。代码如下:
class Solution {
public:
string intToRoman(int num)
{
string res;
vector<int> intVal{,,,,,,,,,,,,};
vector<string> strRoman{"M","CM","D","CD","C","XC","L","XL","X",
"IX","V","IV","I"};
for(int i=;i<intVal.size();++i)
{
while(num>=intVal[i])
{
num-=intVal[i];
res+=strRoman[i];
}
}
return res;
}
};
[Leetcode] Interger to roman 整数转成罗马数字的更多相关文章
- [LeetCode] Integer to Roman 整数转化成罗马数字
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- [LeetCode] 12. Integer to Roman 整数转化成罗马数字
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...
- 012 Integer to Roman 整数转换成罗马数字
给定一个整数,将其转为罗马数字.输入保证在 1 到 3999 之间. 详见:https://leetcode.com/problems/integer-to-roman/description/ cl ...
- [LintCode] Integer to Roman 整数转化成罗马数字
Given an integer, convert it to a roman numeral. The number is guaranteed to be within the range fro ...
- 【LeetCode】12. Integer to Roman 整数转罗马数字
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:roman, 罗马数字,题解,leetcode, 力扣, ...
- Leetcode#13. Roman to Integer(罗马数字转整数)
题目描述 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即 ...
- leetcode:Roman to Integer(罗马数字转化为罗马数字)
Question: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the rang ...
- lintcode :Integer to Roman 整数转罗马数字
题目 整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XC ...
- LeetCode OJ-- Integer to Roman @
@表示有更优解法 https://oj.leetcode.com/problems/integer-to-roman/ 将自然数,转换成罗马数字,输入范围为 1 ~ 3999,因为罗马数没有0. 用一 ...
随机推荐
- JS 定时器,定时调用PHP
$(function() { var voiceplay=function(){ var site = location.href.split('_cms')[0] + '_cms/'; $.ajax ...
- MetInfo最新网站漏洞如何修复以及网站安全防护
metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的 ...
- Redis缓存数据库的安装与配置(1)
1.安装 tarxf redis-3.2.5.tar.gz cd redis-3.2.5 make mkdir -p /usr/local/redis/bin src目录下这些文件作用如下 redis ...
- python2.7练习小例子(五)
5):题目:输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比 ...
- oracle查询优化,存储过程select表循环插入另一个表,以及索引重建
查询语句pl/sql中用F5优化语句 ORACLE的explain plan工具的作用只有一个,获取语句的执行计划1.语句本身并不执行,ORACLE根据优化器产生理论上的执行计划2.语句的分析结果存放 ...
- 1826: [JSOI2010]缓存交换
1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码 ...
- windows 10 下的linux子系统用法 -- tmux分屏工具用法
1 激活linux子系统的方法见百度: 2 打开powershell,输入bash启动子系统终端:输入exit退出: 3 输入tmux attach连接会话:ctrl-b+d 返回终端:ctrl-b+ ...
- Django笔记 —— 基础部分总结
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- 「日常训练」 不容易系列之(3)—— LELE的RPG难题 (HDU 2045)
题目简述 有排成一行的n" role="presentation">nn个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何 ...
- App测试基本流程详解
1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间. 1.3测试资 ...