1. 程式人生 > 實用技巧 >013羅馬數字轉整數

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

在程式碼實現上,可以往後多看一位,對比當前位與後一位的大小關係,從而確定當前位是加法還是減法;當沒有下一位時,做加法即可。

三、圖解(簡單解析一下)