2016年11月30日 星期三

[LeetCode] 13. Roman to Integer

轉自LeetCode

Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
<Solution>

這題和 Integer to Roman 剛好相反

這邊要運用到羅馬數字的一些特性 (參考資料)
SymbolIVXLCDM
Value1510501005001,000
Number494090400900
NotationIVIXXLXCCDCM
  • I、X、C 這三個數字,連在一起用,或是放在比它大的數的右邊當加法用時,最多只能三個;放在比它大的數的左邊當減法用時,最多只能一個
    例如 : III = 3、IV = 4、XX = 20、LX = 60、LXXX = 80、XC = 90

    沒有 XXC = 80,這是不符合規則的
  • V、L、D,這三個數不能放在比它大的數的左邊,拿來當減法用
  • V 和 X 左邊只能放 I
  • L 和 C 左邊只能放 X
  • D 和 M 左邊只能放 C
因為題目會給符合規則的羅馬數字

所以綜合以上規則,可以得出以下想法
  • 只判斷是不是 I、V、X、L、C、D、M
  • 如果是最後一個字元,直接加上對應數值
  • 如果不是最後一個字元,檢查下一個字元的對應數值,是不是比目前的大;是的話,代表目前的數值是用來當減法,要減掉、不是的話,就加上對應數值
  • 非上述情況,就減掉
寫成 code 如下

沒有留言:

張貼留言