LeetCode-13ロマ数字変換整数

4006 ワード

"""      7     ,          :
ROMAN = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
  hint1   ,                           ,      :
四つのルール(http://blog.csdn.net/net_wolf_007/article/details/51770112)
  • と同じ数字が連写されており、表示されている数はこれらの数字が加算された数に等しい.XXXが示すように、
  • の小さい数字は大きな数字の右側にあり、表現されている数はこれらの数字の合計に等しい.例えばVIIIは8
  • を表している.
  • の小さい数字(I、X、Cに限られる)は大きな数字の左側にあり、表した数は大きな数から小さい数を減算します.IVが示すように、4
  • です.
  • は、一つの数の上に横線を引いて、この数のプラス1000倍を表しています.(テーマは4000以内の数だけ考えていますので、この規則は考えられません.)
  • 問題を作るだけではなく、問題を見ても分かりません.一緒に手を挙げましょう."""class Solution:     def romanToInt(self, s):         """         :type s: str         :rtype: int         """         sum = 0         ROMAN = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}         for i in range(len(s)-1):             if (ROMAN[s[i]] < ROMAN[s[i+1]]):                 sum = sum - ROMAN[s[i]]             else:                 sum = sum + ROMAN[s[i]]         return sum + ROMAN[s[-1]]                  class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int I(1),V(5),X(10),L(50),C(100),D(500),M(1000) """ sum = 0 temp = 0 ROMAN = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} for ch in s: ch_val = int(ROMAN[ch]) sum = sum + ch_val if temp < ch_val: sum -= temp*2 temp = ch_val return sum