Leetcode13、罗马数字转整数
自己的解法,用一个map,将所有情况对应的值都记录起来,然后遍历去找,效果很慢。
别人的解法
当小值在大值的左边,则减小值,如 IV=5-1=4
当小值在大值的右边,则加小值,如 VI=5+1=6
保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。。
class Solution {
public int romanToInt(String s) {
if(s==null) return 0;
int res=0;
int pre=getValue(s.charAt(0));
for(int i=1;i<s.length();i++){
int cur=getValue(s.charAt(i));
if(pre<cur) res-=pre;
else res+=pre;
pre=cur;
}
res+=pre;
return res;
}
public int getValue(char c){
switch(c){
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;
}
}
}