LeetCode - Roman to Integer

2013.12.1 23:16

Given a roman numeral, convert it to an integer.

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

Solution:

  Given a Roman number, convert it to normal arabian form. Just do the conversion from left to right, one digit by one.

  Here is the wiki if you need background knowledge about Roman numerals:

    http://en.wikipedia.org/wiki/Roman_numerals

  Time complexity is O(n), where n is the length of the given Roman string. Space complexity is O(1), actually 128.

Accepted code:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         // IMPORTANT: Please reset any member data you declared, as
 5         // the same Solution instance will be reused for each test case.
 6         int i, len;
 7         int res;
 8         
 9         b['I'] = 1;
10         b['V'] = 5;
11         b['X'] = 10;
12         b['L'] = 50;
13         b['C'] = 100;
14         b['D'] = 500;
15         b['M'] = 1000;
16 
17         res = 0;
18         i = 0;
19         len = s.length();
20         while(i < len){
21             if(i < len - 1){
22                 if(b[s[i]] < b[s[i + 1]]){
23                     res += b[s[i + 1]] - b[s[i]];
24                     i += 2;
25                 }else{
26                     res += b[s[i]];
27                     ++i;
28                 }
29             }else{
30                 res += b[s[i]];
31                 ++i;
32             }
33         }
34         
35         return res;
36     }
37 private:
38     int b[128];
39 };

 

 posted on 2013-12-01 23:22  zhuli19901106  阅读(232)  评论(0编辑  收藏  举报