题目来源:
力扣
https://leetcode.cn/problems/roman-to-integer/题目简介:
就是把罗马数字转化成阿拉伯数字。
思路1:
确定好每个罗马字母所对应的值,遍历整个字符串,后一个字符小于前一个字符,两字符就是相加,后一个字符大于前一个字符,两字符就是相减,当没有下一位时,做加法即可。
代码实现:
import java.util.*;
class Solution {
public int romanToInt(String s) {
int sum = 0;
int preNum = getValue(s.charAt(0));
for(int i = 1;i < s.length(); i ++) {
int num = getValue(s.charAt(i));
if(preNum < num) {
sum -= preNum;
} else {
sum += preNum;
}
preNum = num;
}
sum += preNum;
return sum;
}
private int getValue(char ch) {
switch(ch) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
}
思路二:哈希表
简单的把switch函数换成键值指对
class Solution {
private:
unordered_map
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000},
};
public:
int romanToInt(string s) {
int ans = 0;
int n = s.length();
for (int i = 0; i < n; ++i) {
int value = symbolValues[s[i]];
if (i < n - 1 && value < symbolValues[s[i + 1]]) {
ans -= value;
} else {
ans += value;
}
}
return ans;
}
};