leetcode -- Roman to Integer

Given a roman numeral, convert it to an integer.

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

» Solve this problem

[解题思路]

 从前往后扫描,用一个临时变量记录分段数字。

 
  • 如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1
  • 否则,将当前值加入到结果中,然后开始下一段记录。比如VI = 5 + 1, II=1+1
 1 public static int romanToInt(String s) {
 2         // Start typing your Java solution below
 3         // DO NOT write main() function
 4         int result = 0;
 5         if (s == null || s.length() == 0) {
 6             return result;
 7         }
 8         for (int i = 0; i < s.length(); i++) {
 9             if (i > 0 && cToI(s.charAt(i)) > cToI(s.charAt(i - 1))) {
10                 result += cToI(s.charAt(i)) - cToI(s.charAt(i - 1)) * 2;
11             } else {
12                 result += cToI(s.charAt(i));
13             }
14         }
15 
16         return result;
17     }
18 
19     private static int cToI(char c) {
20         switch (c) {
21         case 'I':
22             return 1;
23         case 'V':
24             return 5;
25         case 'X':
26             return 10;
27         case 'L':
28             return 50;
29         case 'C':
30             return 100;
31         case 'D':
32             return 500;
33         case 'M':
34             return 1000;
35         default:
36             return 0;
37         }
38     }

 

posted @ 2013-09-04 22:54  feiling  阅读(210)  评论(0编辑  收藏  举报