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;
}
} 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
symbolMap= new HashMap
(){ { 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