原題地址:https://oj.leetcode.com/problems/roman-to-integer/
題意:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解題思路:將羅馬數字轉換成對應的整數。首先將羅馬數字翻轉,從小的開始累加,如果遇到CM(M-C=1000-100=900)這種該怎么辦呢?因為翻轉過來是MC,M=1000先被累加,所以使用一個last變量,把M記錄下來,如果下一個數小於M,那么減兩次C,然后將C累加上,這個實現比較巧妙簡潔。
代碼:
class Solution: # @return an integer def romanToInt(self, s): numerals = { "M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1 } sum=0 s=s[::-1] last=None for x in s: if last and numerals[x]<last: sum-=2*numerals[x] sum+=numerals[x] last=numerals[x] return sum