leetcode13.罗马数字转换(字典的使用)

public class LeetCode13 {

//字典
private int zidian(char zidian){
switch (zidian){
case 'I':return 1;
case 'V':return 5;
case 'X':return 10;
case 'L':return 50;
case 'C':return 100;
case 'D':return 500;
case 'M':return 1000;
default:return 0;
}
}

public int luomaNumber(String zidian){
//存取最终结果和第一个结果
int num=0,newnum=zidian(zidian.charAt(0));
//标记,是否进入循环和循环数i
int a=0,i;
/**
* 进行字典比较,并储存相应结果
* 此方法问题在于存在溢出现象,charAt()当遍历至最后一位继续遍历会报错
* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
* 所以相应改进方法,如果只有一位则不进入循环,如果有多位则用前面一位比较当前位,最后在结果处添加当前位
*/
for(i=1;i<zidian.length();i++){
if(zidian(zidian.charAt(i-1))>=zidian(zidian.charAt(i))){
num+=zidian(zidian.charAt(i-1));
}
if(zidian(zidian.charAt(i-1))<zidian(zidian.charAt(i))){
num-=zidian(zidian.charAt(i-1));
}
a=1;
}
//a=0时意味着未进入循环,此时直接输出charAt0
if(a==0){
return newnum;
}
//由于循环无法添加最后一个数,所以在这里将其添加上,且由于i循环结束后会+1,所以在此减去1才是正确的最后一位
num+=zidian(zidian.charAt(i-1));
return num;

}

public static void main(String args[]){
String zidian;
int num;
LeetCode13 leedCode13=new LeetCode13();
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要转换的罗马数字:");
zidian=sc.nextLine();
num=leedCode13.luomaNumber(zidian);
System.out.println("转换结果为:"+num);
}

}
/**leetcode提交代码
* public int romanToInt(String s) {
* //存取最终结果和第一个结果
* int num=0,newnum=zidian(s.charAt(0));
* //标记,是否进入循环和循环数i
* int a=0,i;
* for(i=1;i<s.length();i++){
* if(zidian(s.charAt(i-1))>=zidian(s.charAt(i))){
* num+=zidian(s.charAt(i-1));
* }
* if(zidian(s.charAt(i-1))<zidian(s.charAt(i))){
* num-=zidian(s.charAt(i-1));
* }
* a=1;
* }
* //a=0时意味着未进入循环,此时直接输出charAt0
* if(a==0){
* return newnum;
* }
* //由于循环无法添加最后一个数,所以在这里将其添加上,且由于i循环结束后会+1,所以在此减去1才是正确的最后一位
* num+=zidian(s.charAt(i-1));
* return num;
* }
*
* //字典
* private int zidian(char zidian){
* switch (zidian){
* case 'I':return 1;
* case 'V':return 5;
* case 'X':return 10;
* case 'L':return 50;
* case 'C':return 100;
* case 'D':return 500;
* case 'M':return 1000;
* default:return 0;
* }
* }
*
* }
* 代码注释
* * 进行字典比较,并储存相应结果
* * 此方法问题在于存在溢出现象,charAt()当遍历至最后一位继续遍历会报错
* * Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
* * 所以相应改进方法,如果只有一位则不进入循环,如果有多位则用前面一位比较当前位,最后在结果处添加当前位
* */
原文地址:https://www.cnblogs.com/shudaixiongbokeyuan/p/13368970.html