Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

 1 int romanToInt(char* s) {
 2     int map[26] = {0};
 3     map['I'-'A'] = 1;
 4     map['V'-'A'] = 5;
 5     map['X'-'A'] = 10;
 6     map['L'-'A'] = 50;
 7     map['C'-'A'] = 100;
 8     map['D'-'A'] = 500;
 9     map['M'-'A'] = 1000;
10     int len = strlen(s);
11     int n,nn;
12     int sum = 0;
13     for(int i =0; i < len; i++){
14         if(i != len-1){
15             n = map[s[i]-'A'];
16             nn = map[s[i+1]-'A'];
17             if(nn>n){
18                 sum+=(nn-n);
19                 i++;
20             }
21             else
22                 sum += n;
23         
24         }
25         else
26             sum += map[s[len-1]-'A'];
27     }
28     
29     return sum;
30 }

字符串的是从左边开始的

 

 1 class Solution(object):
 2     def romanToInt(self, s):
 3         """
 4         :type s: str
 5         :rtype: int
 6         """
 7         
 8         d = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
 9         res, p = 0, 'I'
10         for c in s[::-1]:
11             res, p = res - d[c] if d[c] < d[p] else res + d[c], c
12         return res
13             

res,p 是元组

posted on 2017-02-28 21:48  Ci_pea  阅读(119)  评论(0编辑  收藏  举报