leetcode 13 罗马数字转整数

原题点这里

 

这个从后面遍历罗马数字,然后比较当前字符的整数是否大于它的前一个,如果是,则当前整数取负值,否则取正值。

方法一:利用map实现 10ms

public static  int romanToInt(String s) {
        HashMap<Character,Integer> r2i = new HashMap();
        r2i.put('I',1);
        r2i.put('V',5);
        r2i.put('X',10);
        r2i.put('L',50);
        r2i.put('C',100);
        r2i.put('D',500);
        r2i.put('M',1000);
        int n=r2i.get(s.charAt(s.length()-1));
        for(int i=s.length()-2;i>=0;i--){
            if(r2i.get(s.charAt(i))>=r2i.get(s.charAt(i+1))){
                n+=r2i.get(s.charAt(i));
            }else{
                n-=r2i.get(s.charAt(i));
            }
        }
        return n;



    }
View Code

 

方法二:使用switch  4ms

public static  int romanToInt2(String s) {
        int cur=0;
        int pre = 0;
        int ans = 0;
        int n = s.length();
        for(int i=n-1;i>=0;i--){
            char c = s.charAt(i);
            switch (c){
                case 'I':
                    cur = 1;
                    break;
                case 'V':
                    cur = 5;
                    break;
                case 'X':
                    cur = 10;
                    break;
                case 'L':
                    cur = 50;
                    break;
                case 'C':
                    cur = 100;
                    break;
                case 'D':
                    cur = 500;
                    break;
                case 'M':
                    cur = 1000;
                    break;
            }
            if(i==(n-1)){
                pre = cur;
                ans += cur;
            }else{
                if(cur<pre){
                    ans-=cur;
                }else{
                    ans+=cur;
                }
                pre=cur;
            }
        }
        return ans;



    }
View Code

 

posted @ 2020-04-01 20:40  超级学渣渣  阅读(165)  评论(0编辑  收藏  举报