zoukankan      html  css  js  c++  java
  • 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
    * * 所以相应改进方法,如果只有一位则不进入循环,如果有多位则用前面一位比较当前位,最后在结果处添加当前位
    * */
  • 相关阅读:
    Mysql问题1862
    S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
    .NET练习计算平方根
    求一个整数以内的素数(函数实现)
    判断一个数是不是素数(函数实现)
    #号在进制输出值的作用,美化输出
    分类——决策树模型(附有决策树生成步骤)
    分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)
    分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
    编写一个程序,求2~n间的素数,n由键盘输入,循环变量分别 从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
  • 原文地址:https://www.cnblogs.com/shudaixiongbokeyuan/p/13368970.html
Copyright © 2011-2022 走看看