leetcode(python) 13.羅馬數字轉整數

思路:通常情況下將羅馬數字和整數相對應存到字典,然后遍歷就可以解決??紤]到6種特殊情況,I、X、C可放置左右,那么設置判斷條件,比較相鄰羅馬數字大小即可解決。

class Solution:
    def romanToInt(self, s: str) -> int:
        r = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
        value = [1, 5, 10, 50, 100, 500, 1000]
        d = dict(zip(r, value))    #zip()打包為元組的列表
        print(d)
        result = 0
        for i in range(len(s)-1):
            if d[s[i]] < d[s[i + 1]]:  #若前面小,則減該數
                result -= d[s[i]]
            elif d[s[i]] >= d[s[i + 1]]:
                result += d[s[i]]
        result += d[s[-1]]

        return result

提交后看到的最優(yōu)解法:
思路:6中特殊情況下,比如IV和VI的結果分別是4和6,結果相差2,也是I的兩倍。同理,I、X、C在分別在左和在右的結果差都是該羅馬數字的兩倍。

        dic1 = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        if not s:
            return (0)
        num = dic1[s[0]]
        previous = dic1[s[0]]
        for i in s[1:]:
            current = dic1[i]
            num += current
            if current > previous:
                num = num - 2 * previous
            previous = current
        return (num)
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容