要求:
输入一串罗马字符串,进行识别并且转为对应的整数
首先讲解下自己的思路:
//M=1000 //D=500 //C=100 //L=50 //X=10
首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。
// 罗马字母中有两字母组合的数据。
// IV=4 用字母a=4代替
// IX=9 用字母b=9代替
// XL=40 用字母c=40代替
// XC=90 用字母d=90代替
// CD=400 用字母e=400代替
// CM=900 用字母f=900代替
s = s.replace("IV","a");
s = s.replace("IX","b");
s = s.replace("XL","c");
s = s.replace("XC","d");
s = s.replace("CD","e");
s = s.replace("CM","f");
//我首先想到的思路是:
//M=1000
//D=500
//C=100
//L=50
//X=10
// 首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
// 所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。
Map<Character,Integer> map = new HashMap<>();
map.put('M',1000);
map.put('D',500);
map.put('C',100);
map.put('L',50);
map.put('X',10);
map.put('V',5);
map.put('I',1);
map.put('a',4);
map.put('b',9);
map.put('c',40);
map.put('d',90);
map.put('e',400);
map.put('f',900);
int result = 0;//记录总和
//测试数据 String test11="MCMXCIV";//1994
for (int i = 0; i < s.length(); i++) {
result+=map.get(s.charAt(i));
}
return result;
不过实话实说,我这执行效率确实是低的吓人,哈哈哈!
算法太简单了,简单易理解。
附上所有的代码字段:
package com.zhm.test;
import java.util.HashMap;
import java.util.Map;
/**
* @Author bige
* @Date: 2022/11/22 8:59
* @ApiNote: 罗马数字转整数
*/
public class Leatcode_test013 {
//输入一串罗马字符串,进行识别并且转为对应的整数
public static int romanToInt(String s) {
// 罗马字母中有两字母组合的数据。
// IV=4 用字母a=4代替
// IX=9 用字母b=9代替
// XL=40 用字母c=40代替
// XC=90 用字母d=90代替
// CD=400 用字母e=400代替
// CM=900 用字母f=900代替
s = s.replace("IV","a");
s = s.replace("IX","b");
s = s.replace("XL","c");
s = s.replace("XC","d");
s = s.replace("CD","e");
s = s.replace("CM","f");
//我首先想到的思路是:
//M=1000
//D=500
//C=100
//L=50
//X=10
// 首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
// 所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。
Map<Character,Integer> map = new HashMap<>();
map.put('M',1000);
map.put('D',500);
map.put('C',100);
map.put('L',50);
map.put('X',10);
map.put('V',5);
map.put('I',1);
map.put('a',4);
map.put('b',9);
map.put('c',40);
map.put('d',90);
map.put('e',400);
map.put('f',900);
int result = 0;//记录总和
//测试数据 String test11="MCMXCIV";//1994
for (int i = 0; i < s.length(); i++) {
result+=map.get(s.charAt(i));
}
return result;
}
public static void main(String[] args) {
String test = "III";//3
String test1 = "IV";//4
String test2 = "IX";//9
String test3 = "XL";//40
String test4 = "XC";//90
String test5 = "CD";//400
String test6 = "XLV";//45
String test7 = "XL";//40
String test8 = "XC";//90
String test9 = "CD";//400
String test10="LVIII";//58
String test11="MCMXCIV";//1994
System.out.println(romanToInt(test));
}
}