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、由上可知,右值永远为正,因此最后一位必然为正。

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

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

  • 相关阅读:
    Thinkphp学习笔记2-
    Thinkphp学习笔记1-URL模式
    WebApi-如何实现接口加密
    微信-.NET调用JS-SDK
    微信-JSSDK .NET版
    HTML-获取/修改html页面标题
    JS-获取图片地址
    微信-js sdk invalid signature签名错误 问题解决
    C++笔试题
    单链表反转的分析及实现
  • 原文地址:https://www.cnblogs.com/lxr-xiaorong/p/13596227.html
Copyright © 2011-2022 走看看