RomanToInt Leetcode(java实现)
题目描述
(https://leetcode.com/problems/roman-to-integer/)
解题方法
此题与IntToRoman(https://blog.youkuaiyun.com/qq_35135923/article/details/85050170)情况类似,由于
1-3 :I进行累加
4 :IV,较小值的I在较大值V前面
5-8 :V后累加I,较小值在较大值后面
9 :IX与4同理
所以比较前后字符对应值大小可发现,主要分两种情况(4和9属于一种情况)(1-3,5-8属于第二种情况)。
解题方法:首先建立HashMap映射,将值和对应字符一一映射
从前到后遍历字符串string
若后面的字符对应的值大于前面字符对应的值,res结果加上当前字符对应值再减去前一字符的两倍,如:遍历IV时,当遍历到V时,应该是1+5-2*1 = 4,所以结果为4.
若后面的字符对应的值小于前面字符对应的值,则直接累加即可
class Solution {
public int romanToInt(String s) {
HashMap <Character,Integer> hs= new HashMap<Character,Integer>();
char[] index = {'M','D','C','L','X','V','I'};
int [] value = {1000,500,100,50,10,5,1};
for(int j=0;j<index.length;j++){
hs.put(index[j], value[j]);
}
int res = hs.get(s.charAt(0));
for(int i=1;i<s.length();i++){
System.out.println(s.charAt(i));
if(hs.get(s.charAt(i)) > hs.get(s.charAt(i-1))){
res = res + hs.get(s.charAt(i)) - 2* hs.get(s.charAt(i-1));
System.out.println(res);
}
else{
res = hs.get(s.charAt(i))+res;
System.out.println(res);
}
}
return res;
}
}