我的答案:67.72%
public class Solution {
public int romanToInt(String s) {
char[] arr=s.toCharArray();
int leng=arr.length;
if(leng<2) return change(arr[0]);
int sum=change(arr[leng-1]);
for(int i=0;i<leng-1;i++){
if(change(arr[i])<change(arr[i+1])){
sum=sum-change(arr[i]);
}else{
sum=sum+change(arr[i]);
}
}
return sum;
}
private static int change(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;
}
return 0;
}
}
别人的答案
public class Solution {
public int romanToInt(String s) {
//:Ⅰ(1)Ⅴ(5)Ⅹ(10)L(50)C(100)D(500)M(1000)
// rules:位于大数的后面时就作为加数;位于大数的前面就作为减数
//eg:Ⅲ=3,Ⅳ=4,Ⅵ=6,ⅩⅨ=19,ⅩⅩ=20,ⅩLⅤ=45,MCMⅩⅩC=1980
//"DCXXI"
if(s == null || s.length() == 0) return 0;
int len = s.length();
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int result = map.get(s.charAt(len -1));
int pivot = result;
for(int i = len -2; i>= 0;i--){
int curr = map.get(s.charAt(i));
if(curr >= pivot){
result += curr;
}else{
result -= curr;
}
pivot = curr;
}
return result;
}
}
本文详细介绍了两种将罗马数字转换为整数的算法实现。通过分析字符大小进行加减运算,利用哈希映射和条件判断实现了高效准确的转换过程。
692

被折叠的 条评论
为什么被折叠?



