题目:
Given a roman numeral,convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Subscribe to see which companies asked this question
解析思路:
罗马数字共有以下七个,分别为I(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。
用罗马数字表示数时
1、如果有几个相同数字并列,表示这个数的值是数码的几倍,例如:3可表示成III,20可表示成XX。
2、不相同的几个数码并列时,如果小的数码在右边,就表示数的数值是这几个数码的和;如果小的数码在左边,就表示数的数值是数码之差。例如:VI表示6,
IV表示4,XI表示11,MCMLXXX表示1980。
3、罗马数字中不存在0.
在Map接口中键和值一一映射,可以通过键来获取值,现将罗马数字作为键,数字作为值
1、如果字符串只有一位,返回该字符对应的数字即可
2、字符串大于1的情况,结果值sum等于sum加上当前字符串对应的数字,若第下一个数也大于当前这个数,则结果值sum等于sum减去2倍的当前数
代码:
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int romanToInt(String s){
int sum=0;
int value1,value2 = 0;
Map<Character,Integer> m1 = new HashMap<>();
m1.put('I', 1);
m1.put('V', 5);
m1.put('X', 10);
m1.put('L', 50);
m1.put('C', 100);
m1.put('D', 500);
m1.put('M', 1000);
if(s.length()==1){
return m1.get(s.charAt(0));
}else{
for(int i=0;i<s.length()-1;i++){
value1 = m1.get(s.charAt(i));
value2 = m1.get(s.charAt(i+1));
sum=sum+value1;
if(value1<value2){
sum=sum-2*value1;
}
}
return sum + value2;
}
}
}
参考链接 点击打开链接