[leetcode]Roman to Integer
程序员文章站
2024-03-22 14:22:22
...
http://oj.leetcode.com/problems/roman-to-integer/
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Input is guaranteed to be within the range from 1 to 3999.
题中大意为返回罗马数字(字符串)对应的整数。
我的想法很简单,逐位计算。
首先将I, V,X,L,C,D,M存放起来,并与下标做hash,假如第i位字符的下标小于后面的字符(i+1位)的下标,即小数写在了大数前面,表示减去这个小数。相反,如果第i位字符的下标>=i+1位的下标,即小数写在了大数的后面,表示加上这个小数。
代码就很简单了
public int romanToInt(String s) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
fillMap(map);
int[] num = { 1, 5, 10, 50, 100, 500, 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 -= num[map.get(s.charAt(i))];
} else {
result += num[map.get(s.charAt(i))];
}
}
return result;
}
private void fillMap(Map<Character, Integer> map) {
map.put('I', 0);
map.put('V', 1);
map.put('X', 2);
map.put('L', 3);
map.put('C', 4);
map.put('D', 5);
map.put('M', 6);
}
推荐阅读
-
LeetCode Hot 热题100 算法题 234.回文链表-算法&测试-easy模式
-
[leetcode]Roman to Integer
-
LeetCode 169:多数元素
-
LeetCode Hot 热题100 算法题 160.相交链表-算法&测试-easy模式
-
Reverse Integer
-
LeetCode Hot 热题100 算法题 141.环形链表-算法&测试-easy模式
-
Python Leetcode(867.转置矩阵)
-
LeetCode Hot 热题100 算法题 461.汉明距离-算法&测试-easy模式
-
LeetCode 算法面试汇总 多数元素
-
【LeetCode刷题】169. 多数元素