013羅馬數字轉整數
阿新 • • 發佈:2020-09-01
一、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、由上可知,右值永遠為正,因此最後一位必然為正。
在程式碼實現上,可以往後多看一位,對比當前位與後一位的大小關係,從而確定當前位是加法還是減法;當沒有下一位時,做加法即可。