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 两种解法的主要内容,如果未能解决你的问题,请参考以下文章