[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. 用一 ...
随机推荐
- ubuntu系統如何啟動root用戶登陸?
之前分享過關於這個問題的文章,現在自己在分享一個關於這個問題的文章給大家.為了學習Linux,一氣之下把win10的換成了ubuntu的系統.安裝就不給大家介紹了(網上很多教程). 在我們安裝好之後, ...
- linux总结及常用命令
一.操作系统的作用: 1.是现代计算机系统中最基本和最重要的系统软件 2.承上启下的作用 3.向下对硬件操作进行封装 4.向上对用户和应用程序提供方便访问硬件的接口 二.不同领域的操作系统: 1 ...
- Angular : IOC的方式:依赖注入
依赖注入 @Component, @Injectable 可以允许别的声明在providers里面的Service等注入到被这两个装饰器装饰的类中 Service等可以被声明在app-module.t ...
- Vue简单使用,
一些零碎的知识点: 在js中变量的声明 有三种方式: let,var, const let: 对应的是一个块级作用域 { let a = 12 } console.log(a) 这是未声明的, var ...
- 004---Linux系统设置
Linux版本相关命令 查看系统版本:cat /etc/redhat-release 查看系统内核版本以及位数:uname -r [root@hostname1 ~]# cat /etc/redhat ...
- 学习RUNOOB.COM进度一
了解MongoDB 由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. 特点 面向文档,操作简单容易 设置任何索引,实现更快排序 本地 ...
- (数据科学学习手札01)Python与R基本数据结构之异同
Python 1.列表(list) list1 = [i for i in range(10)] list1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 特点:可遍历,可索引,可切片 ...
- POJ 1568 Find the Winning Move
Find the Winning Move 链接 题意: 4*4的棋盘,给出一个初始局面,问先手有没有必胜策略? 有的话输出第一步下在哪里,如果有多个,按(0, 0), (0, 1), (0, 2), ...
- P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满 ...
- 今天领导分享了一个探测端口的命令-linux下提示bash:command not found
今天领导分享了一个探测端口的命令,于是试了一下,提示未找到-bash: nc: command not found 因此决定将bash的命令在复习一下,温故而知新 总结整理于此: 确定你的DNS可以 ...