leetcode 13

罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。
记数的方法:
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
  3. 小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
  4. 在一个数的上面画一条横线,表示这个数增值 1,000 倍,如
     
    =5000。


思路:将罗马数字的每个字母按照顺序转换成整数存入数组中;然后按照上述规则操作数组,得到最后的结果。

代码如下:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         int result = 0;
 5         int last = 0;
 6         vector<int> tag;
 7         int n = s.length();
 8         for(int i = 0; i < n; ++i)
 9         {
10            switch (s[i])
11            {
12             case 'I':
13                 tag.push_back(1);
14                 break;
15             case 'X':
16                 tag.push_back(10);
17                 break;
18             case 'C':
19                 tag.push_back(100);
20                 break;
21             case 'M':
22                 tag.push_back(1000);
23                 break;
24             case 'V':
25                 tag.push_back(5);
26                 break;
27             case 'L':
28                 tag.push_back(50);
29                 break;
30             case 'D':
31                 tag.push_back(500);
32                 break;
33            }
34            result = result + tag[i];
35         }
36         for(int i = 0; i < n-1; ++i)
37         {
38             if(tag[i] == 1 || tag[i] == 10 || tag[i] == 100)
39             {
40                 if(tag[i] < tag[i+1])
41                 {
42                     result = result - 2 * tag[i];
43                 }
44             }
45         }
46         
47         return result;
48     }
49 };

 

posted @ 2016-09-02 10:36  花椰菜菜菜菜  阅读(165)  评论(0编辑  收藏  举报