package LeecodeStudy.leecode13;
import java.util.HashMap;
import java.util.Map;
/**
* Leecode13
*
* @author wangWei
* @version 1.0
* @description 力扣13题,罗马数字转整数
* @date 2023/2/14 23:41
*/
public class Leecode13 {
static Map<Character,Integer> symbolMap= new HashMap<Character,Integer> (){{
put('I', 1);
put('V', 5);
put('X', 10);
put('L', 50);
put('C', 100);
put('D', 500);
put('M', 1000);
}};
public static void main(String[] args) {
String s ="X";
System.out.println(getResult(s));
}
public static int getResult(String s) {
//首先定义一个返回结果
int res = 0;
//定义循环边界
int n = s.length();
for (int i = 0; i < n; i++) {
//每轮循环取出s[i]的元素并取出对应的罗马元素的值
int value = symbolMap.get(s.charAt(i));
//当当前循环元素小于整个比对字符串时,当当前的value小于i+1也就是元素的下一个值时,此时的value应该取负数,
//也就是说iv,i对应的值为1,1小于v对应的值5,那么此时的值为4,对i进行负数,就得到-1+5;
//例如上述例子,循环一次res =-1,第二次res = 4,退出循环得到结果。
if (i < n-1 && value<symbolMap.get(s.charAt(i+1))) {
res -= value;
}else {
//这种就是属于ii,iii这种,单纯相加就是需要的结果。
res +=value;
}
}
return res;
}
}
力扣刷题13,官方题解
最新推荐文章于 2024-09-21 10:38:43 发布