LeetCode13 罗马数字转整数

问题描述:将罗马数字转换成整数
思路

  • 方法一

设置目标整数tar初始为0。遍历字符串,如果当前罗马字符比下一字符大,tar加上该罗马数字对应整数,反之减去该值。

  • 方法二:

将所有罗马数字对应整数情况进行映射,在遍历字符串的过程中判断是否出现双字符对应情况,出现则加双字符对应值,否则加单字符对应值。

//java
//方法一
class Solution {
    public int romanToInt(String s) {
        String key = "MDCLXVI";
        int[] value = {1000, 500, 100, 50, 10, 5, 1};
        int tar = 0;
        for(int i = 0; i < s.length(); ++i){
            int left = key.indexOf(s.charAt(i));
            if(i == s.length()-1 || value[left] >= value[key.indexOf(s.charAt(i+1))]) tar += value[left];
            else tar -= value[left];
        }
        return tar;
    }
}

//方法二
class Solution {
    public int romanToInt(String s) {
        HashMap<String, Integer> roman = new HashMap<String, Integer>(){
            {put("I", 1);put("IV", 4);put("V", 5);put("IX", 9);put("X", 10);put("XL", 40);put("L", 50);
             put("XC", 90);put("C", 100);put("CD", 400);put("D", 500);put("CM", 900);put("M", 1000);}
        };
        int tar = 0;
        for(int i = 0; i < s.length();){
            if(i < s.length() - 1 && roman.containsKey(s.substring(i, i+2))){//双字符是否在罗马字符表里
                tar += roman.get(s.substring(i, i+2));
                i += 2;
            }else{
                tar += roman.get(s.substring(i, i+1));
                ++i;
            }
        }
        return tar;
    }
}

你可能感兴趣的:(Leetcode,LeetCode数学部分,LeetCode字符串部分)