LeedCode問題練習Easy編:Roman to Integer問題

今回はローマ数字をintegerに変える問題。

dictionaryの機能を利用して、前から順番にローマ数字を対応する数字に変換して足し合わせればいいのですが、問題は4,9,40,90,400,900だけが前後ふた文字で決まり、後の数字は単に一文字づつ足し合わせればよいこと。

I can be placed before V (5) and X (10) to make 4 and 9. 
X can be placed before L (50) and C (100) to make 40 and 90. 
C can be placed before D (500) and M (1000) to make 400 and 900.

まずはdictionaryの機能の復習

これはキーワードで検索して、一致の値を求められる機能を持つオブジェクトです。

ローマ数字のdictionaryをつくると、

 dict = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500,"M":1000,"IV":4,"IX":9, "XL":40, "XC":90, "CD":400, "CM":900}

こんな感じ。

後のコツはまずローマ数字の前から順に調べて行って、二文字で決まる数字がなければ、一文字ずつ、二文字で決まる数字があれば二文字とんで足し合わせていくことです。

class Solution:
   def romanToInt(self, s: str) -> int:
       dict = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500,"M":1000,"IV":4,"IX":9, "XL":40, "XC":90, "CD":400, "CM":900}
       sum=0
       i=0

       while i <= (len(s)-1):
           if i < len(s)-1 and s[i:i+2] in dict:
               sum += dict[s[i:i+2]] 
               i+=2
           else:
               sum += dict[s[i]]
               i+=1
   
       return (sum)

解答はこんな感じでよいはず。やはりリストのスライス表現は大事です。


この記事が気に入ったらサポートをしてみませんか?