最近再刷leetcode,除了鏈表之外的都用python 實(shí)現(xiàn),貼出一些代碼,希望指正.
問題描述:
整數(shù)轉(zhuǎn)羅馬數(shù)字
在沒做這個(gè)題之前我想大家應(yīng)該對(duì)羅馬數(shù)字都沒什么了解吧.
I = 1;
V = 5;
X = 10;
L = 50;
C = 100;
D = 500;
M = 1000;
其中每?jī)蓚€(gè)階段的之間有一個(gè)減法的表示,比如900=CM醉锅, C寫在M前面表示M-C蚊锹。
解題思想
題中又說最大的是3999,那么對(duì)問題就有了很大的簡(jiǎn)化.
最大的是4位數(shù),那最簡(jiǎn)單的方案就是用四個(gè)list分別表示每個(gè)單位對(duì)應(yīng)的值,然后用長(zhǎng)度遍歷即可.
每個(gè)list的第一位是補(bǔ)位為了好計(jì)算,無意義.
個(gè)位1--9 list1 = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
十位10--90 list2 = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
百位100--900 list3 = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
千位1000--3000 list4 = ["", "M", "MM", "MMM"]
代碼實(shí)現(xiàn)
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
# 個(gè)位 十位 百位 千位
list1 = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
list2 = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
list3 = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
list4 = ["", "M", "MM", "MMM"]
list_all = [list1, list2, list3, list4]
length = len(str(num))
if num == 0:
return " "
list_5 = []
for i in range(length):
tmp = num // pow(10, (length - 1 - i))
num = num % pow(10, (length - 1 - i))
list_5.append(list_all[length -1 - i][tmp])
return ''.join(list_5)
solution = Solution()
print(solution.intToRoman(3999))