LeetCode-罗马数字转整数
2020-03-31 本文已影响0人
沙漠小舟
题目链接 => 戳这里


解析
其实这道题目最重要的一个点是罗马数字如果小的值在大的值左边,那么小的值就要当作负数来算,否则当作正数,转换一下,也就是我们遍历这个罗马数字字符串的时候,要关注它的下一个数和自身的比较值,用于判断自身是正数还是负数。这里的边界情况是,当遍历到最后一个数时,它没有下一个值了,那么它也一定是正数了。
解法
class Solution {
public int romanToInt(String s) {
Character ch = s.charAt(0);
int preNum = getValue(ch);
int num = 0;
for (int i = 1; i < s.length(); i++) {
Character ch1 = s.charAt(i);
int temp = getValue(ch1);
if (preNum < temp) {
num -= preNum;
} else {
num += preNum;
}
preNum = temp;
}
// 最后一位数,一定是正数
num += preNum;
return num;
}
private static int getValue(Character 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;
}
}
}