• 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
    * * 所以相应改进方法,如果只有一位则不进入循环,如果有多位则用前面一位比较当前位,最后在结果处添加当前位
    * */
  • 相关阅读:
    webpack 知识点
    freemarker知识点
    js知识点
    oracle 安装介绍
    CentOS 7.4x64 系统安装完成后配置
    centos 7 互信【ssh】
    spark与mapreduce的最大区别和spark原理
    最简单的搭建SpringBoot框架步骤
    simplify(s)
    ezplot函数
  • 原文地址:https://www.cnblogs.com/shudaixiongbokeyuan/p/13368970.html
Copyright © 2020-2023  润新知