罗马数字

[LeetCode]Integer to Roman

余生长醉 提交于 2020-03-04 01:41:06
题目:给定一个数字,求出相应的罗马数字 算法: 从百度百科( http://baike.baidu.com/view/42061.htm?fr=aladdin#4 )能够知道罗马数字组成的规则: 1. V 和 X 左边的小数字仅仅能用 I 2. L 和 C 左边的小数字仅仅能用 X 3. D 和 M 左边的小数字仅仅能用 C 4. I,X,C 中任一个连用不可超过3个 5. 不能把 V,L,D 作为小数放在大数左边做减法。放在大数右边做加法仅仅能用一个 所以,能够从这些规则中归纳例如以下: IV:4 IX:9 XL:40 XC:90 CD:400 CM:900 public class Solution { public static final String[] ROMAN_STRING = new String[]{ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; public static final int[] ROMAN_VALUE = new int[]{ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; public String intToRoman(int num) { String roman = new

LeetCode:Integer to Roman

吃可爱长大的小学妹 提交于 2020-03-01 10:14:56
1、题目名称 Integer to Roman (阿拉伯数字到罗马数字的转换) 2、题目地址 https://leetcode.com/problems/integer-to-roman 3、题目内容 英文:Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 中文:给出一个整数,将它转换成罗马数字。输入在1-3999之间。 4、题目分析 将阿拉伯数字转换为罗马数字,首先需要了解一下罗马数字的生成规则。罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000),它的生成规则较为复杂,具体可以参考维基百科条目:罗马数字( 中文 | 英文 )。虽然写罗马数字是件比较繁琐的事情,但将十进制数字转换为罗马数字,却有一个简单的规律,可以从下面这张表中看到: 可以看到,与十进制数字相比,虽然在个位、十位、百位、千位这些数位上罗马数字的写法各不相同,但却都有着共同规律。从纵向比较看,每一个数位的写法只和该数位对应的一倍、五倍、十倍对应的字母有关。如8的罗马数字是VIII(5+1+1+1),80是LXXX(50+10+10+10),800是DCCC(500+100+100+100)

罗马数字转成整数

旧街凉风 提交于 2020-02-28 11:52:56
原题   Given a roman numeral, convert it to an integer.   Input is guaranteed to be within the range from 1 to 3999. 题目大意   给定一个罗马数字,将其转换成对应的整数。   输入的数字在1-3999之间。 解题思路   根据罗马数字与整数数字对应关系进行加法操作,如果前一个数字比后一个大就相减,否则进行相加。 代码实现 public class Solution { public int romanToInt(String s) { int result = 0; int prev = 0; // 记录前一个数字的值 for (int i = s.length() - 1; i > -1; i--) { switch (s.charAt(i)) { case 'I': // 1 if (1 < prev) { result -= 1; } else { result += 1; } prev = 1; break; case 'V': // 5 if (5 < prev) { result -= 5; } else { result += 5; } prev = 5; break; case 'X': // 10 if (10 < prev) { result -=

LeetCode 5.罗马数字转整数

喜夏-厌秋 提交于 2020-02-26 13:14:35
题目描述 罗马数字包含以下七种字符: 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 到 3999 的范围内。 示例 1: 输入: "III" 输出: 3 示例 2: 输入: "IV" 输出: 4 示例 3: 输入: "IX" 输出: 9 示例 4: 输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3. 示例 5: 输入: "MCMXCIV" 输出: 1994 解释:

LeetCode12. 整数转罗马数字(C++)

喜你入骨 提交于 2020-02-08 04:39:57
罗马数字包含以下七种字符: 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 到 3999 的范围内。 示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3. 示例 5: 输入: 1994 输出: "MCMXCIV" 解释: M =

13. 罗马数字转整数

岁酱吖の 提交于 2020-02-04 12:43:56
2020-02-04 1.题目描述 根据一定的规则,将 罗马数字转整数 2.题解 直接进行判断即可,注意不要遗漏即可 3.代码 #include <iostream> using namespace std; class Solution { public: int romanToInt(string s) { int sum=0,l=s.length(),i=0; while (i<l) { switch(s[i]) { case 'I': { if (i+1<l) { if (s[i+1]=='V') { sum+=4; i++; } else if (s[i+1]=='X') { sum+=9; i++; } else { sum+=1; } }else sum+=1; break; } case 'V': { sum+=5; break; } case 'X': { if (i+1<l) { if (s[i+1]=='L') { sum+=40; i++; } else if (s[i+1]=='C') { sum+=90; i++; } else { sum+=10; } }else sum+=10; break; } case 'L': { sum+=50; break; } case 'C': { if (i+1<l) { if (s[i+1]=='D') { sum

13. 罗马数字转整数

ε祈祈猫儿з 提交于 2020-01-31 22:36:13
题目描述: 罗马数字包含以下七种字符: 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 到 3999 的范围内。 示例 1: 输入: "III" 输出: 3 示例 2: 输入: "IV" 输出: 4 示例 3: 输入: "IX" 输出: 9 示例 4: 输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3. 示例 5: 输入: "MCMXCIV" 输出: 1994 解释

12. 整数转罗马数字

廉价感情. 提交于 2020-01-30 05:13:41
文章目录 leetcode12:[12. 整数转罗马数字](https://leetcode-cn.com/problems/integer-to-roman/) 题目描述 solution idea 暴力搜索 贪心法 参考文献 leetcode12: 12. 整数转罗马数字 题目描述 罗马数字包含以下七种字符: I , V , X , L , C , D 和 M I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Example 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3 solution idea 暴力搜索 class Solution { public: /* ** 暴力搜索 */ string intToRoman(int num) { string result; vector<string> tmpVec1 = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; vector<string> tmpVec2 = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; vector<string> tmpVec3 = {"", "C", "CC", "CCC",

[LeetCode] 12. Integer to Roman

倾然丶 夕夏残阳落幕 提交于 2020-01-29 03:14:36
整数转换罗马数字。 13题 是正好相反。 题意是给一个整数,请把它转换成罗马数字。规则如下, Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例子, Example 1: Input: 3 Output: "III" Example 2: Input: 4 Output: "IV" Example 3: Input: 9 Output: "IX" Example 4: Input: 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3. Example 5: Input: 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. 这个题不涉及什么算法或者思想,只是单纯的转换。我给出一个我个人觉得比较好记的做法。先给出每个罗马数字和他们对应的整数之间的mapping,然后对于要处理的整数X,找到最大的小于X的对应的罗马数字。因为是JavaScript,所以这里可以直接拼接字符串而不用像Java那样先创建StringBuilder(12行)。 时间O(n) 空间O(n) 1 /** 2 * @param {number} num 3 * @return {string} 4 */ 5

13. 罗马数字转整数

强颜欢笑 提交于 2020-01-27 06:51:14
题目描述: 罗马数字包含以下七种字符: 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 到 3999 的范围内。 示例 1: 输入: "III" 输出: 3 示例 2: 输入: "IV" 输出: 4 示例 3: 输入: "IX" 输出: 9 示例 4: 输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3. 示例 5: 输入: "MCMXCIV" 输出: 1994 解释