419. Roman to Integermedium

Posted abc_begin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了419. Roman to Integermedium相关的知识,希望对你有一定的参考价值。

Given a roman numeral, convert it to an integer.

The answer is guaranteed to be within the range from 1 to 3999.

Example

IV -> 4

XII -> 12

XXI -> 21

XCIX -> 99

 

题意

计数方法:

基本字符
I
V
X
L
C
D
M
相应的阿拉伯数字表示为
1
5
10
50
100
500
1000
  1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
  2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
  4. 正常使用时、连写的数字重复不得超过三次;
  5. 在一个数的上面画一条横线、表示这个数扩大 1000 倍。

组数规则:

有两条须注意掌握:
  1. 基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
  2. 不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;

 

解法一:

 1 class Solution {
 2 public:
 3     /*
 4      * @param s: Roman representation
 5      * @return: an integer
 6      */
 7     int romanToInt(string s) {
 8         int ans = 0;
 9         ans = toInt(s[0]);
10         
11         for (int i = 1; i < s.length(); i++) {
12             ans += toInt(s[i]);
13           
14             if (toInt(s[i-1]) < toInt(s[i])) { 
15                 ans -= toInt(s[i-1]) * 2;
16             } 
17         }
18         
19         return ans;
20     }
21   
22     int toInt(char s) {
23         switch(s) {
24             case I:return 1;
25             case V:return 5;
26             case X:return 10;
27             case L:return 50;
28             case C:return 100;
29             case D:return 500;
30             case M:return 1000;
31         }
32         return 0;
33     }
34 };

 

 

以上是关于419. Roman to Integermedium的主要内容,如果未能解决你的问题,请参考以下文章

13. Roman to Integer

Integer to Roman

12. Integer to Roman

Roman to Integer

[LintCode] Integer to Roman

leetcode 136:roman-to-integer&&leetcode 137:integer-to-roman