zoukankan      html  css  js  c++  java
  • 013罗马数字转整数

    一、java代码

    /*
     * @lc app=leetcode.cn id=13 lang=java
     *
     * [13] 罗马数字转整数
     */
    
    // @lc code=start
    class Solution {
        public int romanToInt(String s) {
            int sum=0;
            //第0位存入preNum
            int preNum=getValue(s.charAt(0));
            //遍历字符串s
            for(int i=1;i<s.length();i++){
                //取出当前第i个字符的值,存入num
                int num=getValue(s.charAt(i));
                //将前一个数值与当前数值比较
                //小值在左边则做减法
                if(preNum<num){
                    sum-=preNum;
                //小值在右边则做加法
                }else{
                    sum+=preNum;
                }
                //把当前值num赋给preNum
                preNum=num;
            }
            //最后一位没有下一位,做加法即可
            sum+=preNum;
            //cannot find symbol -> num
            //sum+=num;
            return sum;
    
        }
        //定义函数方法
        private int getValue(char ch){
            //switch用的太妙了
            switch (ch) {
                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;
                
            }
        }
    }
    // @lc code=end
    
    

    二、题解思路(参考的力扣官网解答)

      1、罗马数字由I,V,X,L,C,D,M构成;
      2、当小值在大值左边,则减小值,如IV=5-1=4;
      3、当小值在大值右边,则加小值,如VI=5+1=6;
      4、由上可知,右值永远为正,因此最后一位必然为正。

    在代码实现上,可以往后多看一位,对比当前位与后一位的大小关系,从而确定当前位是加法还是减法;当没有下一位时,做加法即可。

    三、图解(简单解析一下)

  • 相关阅读:
    Spring Boot启用Swagger2
    Springboot 注解最全详解
    spring-boot-starter-data-jpa 解析
    springboot 微信支付
    springboot整合PageHelper
    SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
    Springboot 发送短信验证码
    Java volatile关键字的作用
    Android兼容性测试应该怎么做逼格更高呢?
    hadoop日志【2】
  • 原文地址:https://www.cnblogs.com/lxr-xiaorong/p/13596227.html
Copyright © 2011-2022 走看看