LeetCode 13. 罗马数字转整数 java 两种解法

Posted 醉苼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 13. 罗马数字转整数 java 两种解法相关的知识,希望对你有一定的参考价值。

解题思路
方法一:
1.用哈希表记录每个字母对应的值
2.遍历字符串,如果当前这个字母比后面那个字母小,就减当前字母的值,否则就加

方法二:
模拟

代码:
方法一:

class Solution {
    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);
		}};
		int ans = 0;
		for(int i = 0; i < s.length(); i++) {
			if(i < s.length()-1 && map.get(s.charAt(i)) < map.get(s.charAt(i+1))) {
				ans -= map.get(s.charAt(i));
			} else {
				ans += map.get(s.charAt(i));
			}
		}
		return ans;
    }
}

方法二:

	public int romanToInt(String s) {
        int ans = 0;
		int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
		String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
		int index = 0;
		for(int i = 0; i < romans.length; i++) {
			if(index < s.length()-1 && s.substring(index, index+2).equals(romans[i])) {
				ans += values[i];
                index += 2;
			}
			while(index < s.length() && s.substring(index, index+1).equals(romans[i])) {
				ans += values[i];
                index++;
			}
		}
		return ans;
    }

以上是关于LeetCode 13. 罗马数字转整数 java 两种解法的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:罗马数字转整数13

[leetcode] 13. 罗马数字转整数

LeetCode 13 罗马数字转整数

LeetCode 13. 罗马数字转整数

LeetCode 13. 罗马数字转整数

LeetCode刷题:No13罗马数字转整数