原题
https://leetcode.cn/problems/integer-to-roman/description/
思路
字典 + 循环
复杂度
时间:O(n)
空间:O(n)
Python代码
class Solution:
def intToRoman(self, num: int) -> str:
def process(i, base):
nonlocal ans
d = dict(zip([1, 5, 10, 50, 100, 500, 1000], 'IVXLCDM'))
if 1 <= i <= 3:
ans += d[base] * i
elif i == 4:
ans += d[base] + d[base * 5]
elif 5 <= i <= 8:
ans += d[base * 5] + d[base] * (i -5)
elif i == 9:
ans += d[base] + d[base * 10]
ans = ''
while num > 0:
if num >= 1000:
i, num = divmod(num, 1000)
process(i, 1000)
elif num >= 100:
i, num = divmod(num, 100)
process(i, 100)
elif num >= 10:
i, num = divmod(num, 10)
process(i, 10)
elif num >= 1:
i, num = divmod(num, 1)
process(i, 1)
return ans
Go代码
func process(i int, base int) string {
// 创建 Map
m := map[int]string{
1: "I",
5: "V",
10: "X",
50: "L",
100: "C",
500: "D",
1000: "M",
}
if 1 <= i && i <= 3 {
return strings.Repeat(m[base], i)
} else if i == 4 {
return m[base] + m[base*5]
} else if 5 <= i && i <= 8 {
return m[base*5] + strings.Repeat(m[base], i-5)
} else {
return m[base] + m[base*10]
}
}
func intToRoman(num int) string {
var ans string
var i int
for num > 0 {
if num >= 1000 {
i = num / 1000
num %= 1000
ans += process(i, 1000)
} else if num >= 100 {
i = num / 100
num %= 100
ans += process(i, 100)
} else if num >= 10 {
i = num / 10
num %= 10
ans += process(i, 10)
} else if num >= 1 {
i = num / 1
num %= 1
ans += process(i, 1)
}
}
return ans
}

被折叠的 条评论
为什么被折叠?



