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

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

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

posted @ 2020-09-01 15:00  阿狸狸爱吃饭  阅读(86)  评论(0编辑  收藏  举报