Leetcode 11、罗马数字转整数
- 题目整体来说并不难,这里面有一个很巧妙的解法,根据当前位置的字符和下一个位置的字符进行判断,来判断对当前位置字符对应的整数是加还是减
思路
- 因为IV = V - I,所以如果当前的字符对应的整数小于下一个字符对应的整数,那么是减掉当前字符对应的整数,其余的都是加法,最后返回结果
时间复杂度:O(n)
- 字符串中的每个字符被访问一次
时间复杂度:O(1)
- 虽然map里面存储了几个对应关系,但是个数是确定的,并且使用了一个result变量维护结果,所以是在常数级别的
代码
class Solution {
public int romanToInt(String s) {
Map<Character, Integer> map = new HashMap<>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int result = 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))) {
result -= map.get(s.charAt(i));
}else{
result += map.get(s.charAt(i));
}
}
return result;
}
}