F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[Leetcode] Roman to Integer

Roman to Integer

I:1

V:5

X:10

L:50

C:100

D:500

M:1000

 

这个问题的求解已经很清楚了:在每次累加的时候记录前面的遇到的字符所对应的数字,如果当前字符所对应的数字比前面的大,则应该减去两倍的前面的字符所对应的数字。

附上代码。

这里还有一个收获是对map的一个初始化方式。

public int romanToInt(String s) {
        Map<Character,Integer> map = new HashMap<Character,Integer>(){{
            put('I',1);
            put('V',5);
            put('X',10);
            put('L',50);
            put('C',100);
            put('D',500);
            put('M',1000);
}};

 

 1 import java.util.*;
 2 
 3 public class Solution {
 4     public int romanToInt(String s) {
 5         Map<Character,Integer> map = new HashMap<Character,Integer>(){{
 6             put('I',1);
 7             put('V',5);
 8             put('X',10);
 9             put('L',50);
10             put('C',100);
11             put('D',500);
12             put('M',1000);
13         }};
14         int pre = 0;
15         int res = 0;
16         for(int i=0;i<s.length();i++){
17             char c = s.charAt(i);
18             res+=map.get(c).intValue();
19             if(map.get(c).intValue()>pre){
20                 res-=2*pre;
21             }
22             pre = map.get(c).intValue();
23         }
24         return res;
25     }
26 }

 

posted on 2015-08-23 18:23  F_G  阅读(173)  评论(0编辑  收藏  举报