Leetcode——每日一题T12.整数转罗马数字(暴力/贪心算法)

法一:暴力法

class Solution:
    def intToRoman(self, num: int) -> str:
        dict = {0:'', 1:'I', 2:'II', 3:'III', 4:'IV', 5:'V', 6:'VI', 7:'VII', 8:'VIII', 9:'IX'}
        s = dict[num%10]
        temp = (num%100-num%10)//10
        if temp < 4:
            s = temp*'X' + s
        elif temp == 4:
            s = 'XL'+ s
        elif temp < 9:
            s = 'L'+(temp-5)*'X'+s
        else:
            s =  'XC'+s
        temp = (num%1000-num%100)//100
        if temp < 4:
            s = temp*'C' + s
        elif temp == 4:
            s = 'CD'+ s
        elif temp < 9:
            s = 'D'+(temp-5)*'C'+s
        else:
            s = 'CM'+s
        temp = (num%10000-num%1000)//1000
        s = temp*'M'+s
        return s

法二:简化版

class Solution:
    def intToRoman(self, num: int) -> str:
        temp_s = ['I','V','X','L','C','D','M']
        i=0
        s = ''
        for j in range(len(str(num))):
            temp = num%10
            if temp < 4:
                s = temp*temp_s[i]+s
            elif temp == 4:
                s = temp_s[i]+temp_s[i+1]+s
            elif temp < 9:
                s = temp_s[i+1]+(temp-5)*temp_s[i]+s
            else:
                s = temp_s[i]+temp_s[i+2]+s
            num //=10
            i+=2
        return s

法三:贪心算法

class Solution:
    def intToRoman(self, num: int) -> str:
        _nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1]
        _romans = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']
        index = 0
        s = ''
        while index < 13:
            while num >= _nums[index]:
                s += _romans[index]
                num -= _nums[index]
            index += 1
        return s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值