【Leetcode | easy】罗马数字转整数
題目
羅馬數(shù)字包含以下七種字符:I, V, X, L,C,D 和 M。
| 字符 | 數(shù)值 |
| I | 1 |
| V | 5 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
例如, 羅馬數(shù)字 2 寫做II,即為兩個(gè)并列的 1。12 寫做XII ,即為 X + II 。 27 寫做 XXVII , 即為 XX + V + II 。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。
示例 1:
輸入: “III”
輸出: 3
示例 2:
輸入: “IV”
輸出: 4
示例 3:
輸入: “IX”
輸出: 9
示例 4:
輸入: “LVIII”
輸出: 58
解釋: C = 100, L = 50, XXX = 30, III = 3.
示例 5:
輸入: “MCMXCIV”
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
思路
- 思路一(自己的思路):從第一個(gè)字母開始判斷,按字符所代表數(shù)值進(jìn)行累加,若字符為C,X,I時(shí),判斷其后一位字符是否為D、M,L、C,V、X,若是,則減去該字符所代表數(shù)值,否則加上該字符所代表數(shù)值。直到累加到最后一位字符,輸出結(jié)果。
- 思路二:從第一個(gè)字母開始,每一次都跟后一位字符比較所代表數(shù)值,若存在“反序”,則減去減去該字符所代表數(shù)值,否則加上該字符所代表數(shù)值。直到累加到最后一位字符,輸出結(jié)果。
- 思路三:構(gòu)建字典,將7種單子符(即I, V, X, L,C,D 和 M)以及6種特殊組合情況(IV,IX,XL,XC,CD,CM)及其代表數(shù)值分別作為key和value放在里面,然后從第一個(gè)字符開始判斷,該字符屬于字典中的哪種情況,進(jìn)行累加。
解答
思路一
class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""s += "0" #標(biāo)記一下結(jié)尾l = len(s)ans = 0for i in range(0,l):print(s[i])if s[i] == 'M':ans += 1000continueif s[i] == 'D':ans += 500continueif s[i] == 'C':if s[i+1] == 'D' or s[i+1] == 'M':ans -= 100else:ans += 100continueif s[i] == 'L':ans += 50continueif s[i] == 'X':if s[i+1] == 'L' or s[i+1] == 'C':ans -= 10else:ans += 10continueif s[i] == 'V':ans += 5continueif s[i] == 'I':if s[i+1] == 'V' or s[i+1] == 'X':ans -= 1else:ans += 1continuereturn ans思路二
class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""x = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}xx = []for i in s:xx.append(x[i])l = len(s)result = 0for i in range(0,l):if i < l - 1:if xx[i] < xx[i+1]:result -= xx[i]else:result += xx[i]result += xx[i]return result思路三
class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""d = dict(I=1,V=5,X=10,L=50,C=100,D=500,M=1000,XL=40,XC=90,CD=400,CM=900,IV=4,IX=9,)i = 0res = 0while i < len(s):if s[i:i + 2] in d:res += d.get(s[i:i + 2])i += 2else:res += d.get(s[i])i += 1return res總結(jié)
以上是生活随笔為你收集整理的【Leetcode | easy】罗马数字转整数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Leetcode | easy】回文数
- 下一篇: 【Leetcode | easy】最长公