Tip1:
从右向左遍历,如果当前数字temp比目前最大的数字max大,就加上temp并且更新最大数字max,否则减去temp。
class Solution {
Map<Character, Integer> hashtable = new HashMap<>();
public Solution(){//类的成员变量的初始化应该在类的构造函数中进行
hashtable.put('I', 1);
hashtable.put('V', 5);
hashtable.put('X', 10);
hashtable.put('L', 50);
hashtable.put('C', 100);
hashtable.put('D', 500);
hashtable.put('M', 1000);}
public int romanToInt(String s) {
int sum=0,n=s.length();
char[]array=s.toCharArray();//转为字符数组
int max=0;
for(int i=n-1;i>=0;i--){
int temp=hashtable.get(array[i]);
if(temp>=max){
sum+=temp;
max=temp;
}
else{
sum-=temp;
}
}return sum;
}
}
Tip2:
switch和case列举各个字母的情况。
charAt 是 Java 中 String 类的一个方法,它用于获取字符串中指定位置的字符。
class Solution {
public int romanToInt(String s) {
int sum = 0;
for(int i = 0; i < s.length(); i++){
switch (s.charAt(i)){
case 'I':
if(i == s.length() - 1 || (s.charAt(i + 1) != 'V' && s.charAt(i + 1) != 'X')){
sum += 1;
}else{
sum -= 1;
}
break;
case 'V':
sum += 5;
break;
case 'X':
if(i == s.length() - 1 || (s.charAt(i + 1) != 'L' && s.charAt(i + 1) != 'C')){
sum += 10;
}else{
sum -= 10;
}
break;
case 'L':
sum += 50;
break;
case 'C':
if(i == s.length() - 1 || (s.charAt(i + 1) != 'D' && s.charAt(i + 1) != 'M')){
sum += 100;
}else{
sum -= 100;
}
break;
case 'D':
sum += 500;
break;
case 'M':
sum += 1000;
break;
}
}
return sum;
}
}