程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode Roman to Integer

LeetCode Roman to Integer

編輯:C++入門知識

LeetCode Roman to Integer


LeetCode解題之Roman to Integer


原題

將一個羅馬數字轉化為阿拉伯數字,范圍在1-3999。下面是羅馬數字的介紹及基本規則:

羅馬數字采用七個羅馬字母作數字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。記數的方法:

相同的數字連寫,所表示的數等於這些數字相加得到的數,如 Ⅲ=3 小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數,如 Ⅷ=8、Ⅻ=12 小的數字(限於 Ⅰ、X 和 C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如 Ⅳ=4、Ⅸ=9

注意點:

輸入的羅馬數字是符合規范的,不需要考慮錯誤情況

例子:

輸入: s=”XCIX”
輸出: 99

解題思路

根據羅馬數字的規則,只有在前面的字母比當前字母小的情況下要執行減法,其他情況只需要把羅馬字母對應的數字直接相加即可。如果發現前一個字母比當前字母小,就減去前一個字母,因為錯誤的把它加入了結果,且在加上當前字母時還要減去前一個字母的值。

AC源碼

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        map = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
        result = 0
        for i in range(len(s)):
            if i > 0 and map[s[i]] > map[s[i - 1]]:
                result -= map[s[i - 1]]
                result += map[s[i]] - map[s[i - 1]]
            else:
                result += map[s[i]]
        return result

# Test cases
if __name__ == "__main__":
    assert Solution().romanToInt("XII") == 12
    assert Solution().romanToInt("XXI") == 21
    assert Solution().romanToInt("XCIX") == 99

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved