@author: zzq
@software: pycharm
@file: luoma2int.py
@time: 2018/9/16 17:06
要求: 羅馬數字轉數字
字元 數值
i 1
v 5
x 10
l 50
c 100
d 500
m 1000
羅馬數字 2 寫做 ii ,即為兩個並列的 1。12 寫做 xii ,即為 x + ii 。
27 寫做 xxvii, 即為 xx + v + ii 。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,
例如 4 不寫做 iiii,而是 iv。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。
同樣地,數字 9 表示為 ix。這個特殊的規則只適用於以下六種情況:
1) i 可以放在 v (5) 和 x (10) 的左邊,來表示 4 和 9。
2) x 可以放在 l (50) 和 c (100) 的左邊,來表示 40 和 90。
3) c 可以放在 d (500) 和 m (1000) 的左邊,來表示 400 和 900。
思路: 每次先將當前羅馬數字表示的數值加上,然後判斷後面跟的是不是六種特殊情況之一,如果是,則減去二倍的當前羅馬數字表示的數值。
class solution():
def __init__(self):
pass
def str2int(self, n):
if n == 'i':
return 1
if n == 'v':
return 5
if n == 'x':
return 10
if n == 'l':
return 50
if n == 'c':
return 100
if n == 'd':
return 500
if n == 'm':
return 1000
def romantoint(self, s):
""":type s: str
:rtype: int
"""roman_len = len(s)
value = 0
currstr = ''
for i in range(0, roman_len):
value += self.str2int(s[i])
if currstr == 'i' and s[i] == 'v':
value += - 2 * self.str2int(currstr)
if currstr == 'i' and s[i] == 'x':
value += - 2 * self.str2int(currstr)
if currstr == 'x' and s[i] == 'l':
value += - 2 * self.str2int(currstr)
if currstr == 'x' and s[i] == 'c':
value += - 2 * self.str2int(currstr)
if currstr == 'c' and s[i] == 'd':
value += - 2 * self.str2int(currstr)
if currstr == 'c' and s[i] == 'm':
value += - 2 * self.str2int(currstr)
currstr = s[i]
return value
if __name__ == "__main__":
x = "ix"
answer = solution()
print answer.romantoint(x)
leetcode 13 羅馬數轉整數
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...
13 羅馬數轉整數
從左到右逐個字元遍歷字串,找出字元對應的整數,累加起來,在找字元的過程中,需要判斷該字元對應整數與後面乙個字元對應的整數的大小關係。如果前面大於後面字元對應的整數,則將前面字元對應的整數加進去,否則將後面字元對應的整數減去前面字元對應的整數得到的值加進去,此時這次遍歷要跳躍兩個字元來進行下一次遍歷。...
leetcode題庫 回文數
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。輸入 121 輸出 true輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。輸入 10 輸出 false 解釋 從右向左讀,為 01 因此它不是乙個回文...