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;
    }
};


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

[leetcode 13] Roman to Integer

题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the ra...

[leetcode]详解Integer to Roman

Integer to RomanRoman与Integer的转换规则?From Wikipedia 现在用的罗马数字由7个字符表示,如下表: 字符 值 I 1 V 5 X...
  • CY_TEC
  • CY_TEC
  • 2016年06月15日 12:01
  • 449

Leetcode:integer_to_roman

将给定的数字(阿拉伯数字)转化成罗马数字。数字不会大于3999

【LeetCode with Python】 Integer to Roman

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 ...
  • nerv3x3
  • nerv3x3
  • 2014年07月06日 15:01
  • 3513

LeetCode_Easy心得:13. Roman to Integer (C语言)

13. Roman to Integer
  • hhhhhyb
  • hhhhhyb
  • 2017年07月21日 18:59
  • 142

[LeetCode]Roman to Integer

题目是把罗马数字转成整形返回,其实对罗马数字只知道I 到X, 特意去维基百科查了下。发现了如下几条规则: 羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和...
  • jhbxlx
  • jhbxlx
  • 2014年01月26日 14:40
  • 547

LeetCode之12---Integer to Roman

题目:   Given an integer, convert it to a roman numeral.   Input is guaranteed to be within the rang...

[LeetCode]12. Integer to Roman(整数转化为罗马数字)

12. Integer to Roman点击查看相关题 罗马数字转化为整数 Given an integer, convert it to a roman numeral. Input is gu...

leetcode第一刷_Integer to Roman

这道题当时不会写,是参照discuss写的。 首先要弄明白罗马数字的规则,这个在国外难道是常识吗,为什么题干一点都没讲。。 4000以下一共有下面几种符号:"M", "D", "C", "L", ...

【leetcode c++】13 Roman to Integer

题目 Given a roman numeral, convert it to aninteger. Input is guaranteed to be within the rangefrom 1 ...
  • hqq39
  • hqq39
  • 2015年06月12日 12:36
  • 487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode:Roman to Integer
举报原因:
原因补充:

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