LeetCode:Roman to Integer

原创 2015年11月17日 15:57:10

问题描述:Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.

思路:

纯模拟:

基本字符
I
V
X
L
C
D
M
相应的阿拉伯数字表示为
1
5
10
50
100
500
1000
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
  3. 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
  4. 正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
  5. 在一个数的上面画一条横线,表示这个数扩大1000倍。
  • 个位数举例
    Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
  • 十位数举例
    Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
  • 百位数举例
    C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】
  • 千位数举例
    M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】


C++代码:

class Solution {
public: int romanToInt(string s) {
        int result = change(s[0]);
        for(int i = 1;i < s.length();++i){
            if(change(s[i - 1]) < change(s[i])){
                result += change(s[i]) - 2 * change(s[i - 1]);
            }else{
                result += change(s[i]);
            }
        }
        return result;
    }
    int change(char ch){
        switch(ch){
            case 'I': return 1;  
            case 'V': return 5;  
            case 'X': return 10;  
            case 'L': return 50;  
            case 'C': return 100;  
            case 'D': return 500;  
            case 'M': return 1000; 
        }
        return 0;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

Integer to Roman (罗马数字转换) 【leetcode】

题目:Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range fr...
  • zhang9801050
  • zhang9801050
  • 2013年09月20日 16:09
  • 16641

[leetcode]Roman to Integer C语言

【题目】 Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be w...
  • noc_lemontree
  • noc_lemontree
  • 2015年08月20日 09:49
  • 627

LeetCode13——Roman to Integer

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...
  • booirror
  • booirror
  • 2015年01月27日 17:51
  • 2459

LeetCode --- 12. Integer to Roman

题目链接:Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be w...
  • makuiyu
  • makuiyu
  • 2015年01月29日 10:49
  • 1968

[LeetCode]Roman to Integer,解题报告

前言 又是一个周末下午,每到周末可以和女友一起玩玩手机游戏做做体操还挺开心的,但是还是要多做题目保持写代码的感觉 题目 Given a roman numeral, convert it to...
  • zinss26914
  • zinss26914
  • 2013年12月01日 20:46
  • 19505

【LeetCode】Integer to Roman 和 Roman to Integer 解题报告

【题目】 Given a roman numeral, convert it to an integer. Or, Given an integer, convert it to a roman nu...
  • ljiabin
  • ljiabin
  • 2014年10月10日 20:28
  • 21643

LeetCode 12 Integer to Roman(C,C++,Java,Python)

Problem: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the ra...
  • runningtortoises
  • runningtortoises
  • 2015年05月08日 13:13
  • 1108

[LeetCode] 012. Integer to Roman (Medium) (C++/Java/Python)

[LeetCode] 012. Integer to Roman (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年03月02日 23:08
  • 2305

(Java)LeetCode-12. Integer to Roman

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...
  • u012848330
  • u012848330
  • 2016年05月10日 23:13
  • 443

LeetCode(12) IntegerToRoman

题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from...
  • feliciafay
  • feliciafay
  • 2013年12月10日 08:36
  • 2217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode:Roman to Integer
举报原因:
原因补充:

(最多只允许输入30个字)