给定一个整数,将其转换成整数
思路:
按照题目的描述,可以总结如下规则:
1.罗马数字由 I,V,X,L,C,D,M 构成;
2.当小值在大值的左边,则减小值;
3.当小值在大值的右边,则加小值;
由上可知,右值永远为正,因此最后一位必然为正,把一个小值放在大值的左边,就是做减法,否则为加法。在代码实现上,可以往后看多一位,对比当前位与后一位的大小关系,从而确定当前位是加还是减法。当没有下一位时,做加法即可。也可保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。
代码:
首先定义一个方法用于将每一个罗马数字转换成整数,方便后面的计算
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;
}
}
}
接着写出主要代码:
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;
}
最后测试用例: