Leetcode 13. Roman to Integer

  • Post author:
  • Post category:其他


在这里插入图片描述


方法1

:第12题的变种。从左往右遍历string,check当前char符合哪个罗马数字,check后叠加进最后的结果中。这题主要还是edge cases的处理,就比谁更细心了。时间复杂1,空间复杂1.

class Solution {
    public int romanToInt(String s) {
        int res = 0;
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};    
        String[] symbols = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int len = s.length();
        int count = 0;
        for(int i = 0; i< len; ++i){
            char c = s.charAt(i);
            if((c == 'I' || c == 'X' || c == 'C') && i != len - 1){
                char ch = s.charAt(i+1);
                if(c == 'I'){
                    if(ch == 'X'){ res = res + 9; i++;}
                    else if(ch == 'V') {res = res + 4; i++;}
                    else if(ch == 'I') {count += 2;i++;}
                    else{res = res + 1;}
                }else if(c == 'X'){
                    if(ch == 'C') {res = res + 90; i++;}
                    else if(ch == 'L') {res = res + 40; i++;}
                    else{res = res + 10;}
                }else{
                    if(ch == 'M') {res = res + 900; i++;}
                    else if(ch == 'D') {res = res + 400; i++;}
                    else{res = res + 100;}
                }
            }else{
                for(int j = 0; j < 13; ++j){
                    if(symbols[j].length() == 1 && symbols[j].charAt(0) == c){
                        res = res + values[j];
                        break;
                    }
                }
            }
        }
        return res + count;
    }
}



版权声明:本文为GoodJobJasper原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。