[LeetCode]12. Integer to Roman解法及python代码

本文介绍了一种将整数转换为罗马数字的算法实现,通过构建特定的映射关系和处理特殊情况,如4和9的表示,实现了从1到3999范围内整数的有效转换。

原题链接:https://leetcode.com/problems/integer-to-roman
这个题我最开始的想法很简单,由于限制输入在1~3999之间,所以可以写出1~10,10~3999间的能整除10的数的罗马数字,对于输入使用整数除法以及求余处理就可以O(1)的得到结果,下面代码:

class Solution(object):
    def intToRoman1(self, num):
        """
        :type num: int
        :rtype: str
        """
        M = ["", "M", "MM", "MMM"]
        C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
        X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
        I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
        return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]

接下来的代码纯粹出于个人练习,提高coding能力。因为这种题主要是规律的总结,需要在写的过程中比较细心,下面是代码,主要注意的点就是4和9的处理上:

class Solution(object):
    """
    锻炼能力的方法
    """
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        base = ["I","II","III","IV","V","VI","VII","VIII","IX","X","L","C","D","M"]
        baseNum = 1000
        romanStr = ""
        while num > 10:
            temp = num/baseNum
            if temp !=0:
                if baseNum == 1000:
                    for i in range(temp):
                        romanStr = romanStr + base[13]
                    num = num - temp*baseNum
                    baseNum = baseNum/10
                    continue
                if baseNum == 100:
                    if temp < 4:
                        for i in range(temp):
                            romanStr =  romanStr + base[11]
                    elif temp == 4:
                        romanStr = romanStr + base[11] + base[12]
                    elif temp > 4 and temp <9:
                        romanStr = romanStr + base[12]
                        for i in range(temp-5):
                            romanStr = romanStr + base[11]
                    else:
                        romanStr = romanStr + base[11] + base[13]
                    num = num - temp*baseNum
                    baseNum = baseNum/10
                    continue
                if baseNum == 10:
                    if temp < 4:
                        for i in range(temp):
                            romanStr = romanStr + base[9]
                    elif temp == 4:
                        romanStr = romanStr + base[9] + base[10]
                    elif temp > 4 and temp <9:
                        romanStr = romanStr + base[10]
                        for i in range(temp-5):
                            romanStr = romanStr + base[9]
                    else:
                        romanStr = romanStr + base[9] + base[11]
                    num = num - temp*baseNum
                    baseNum = baseNum/10
                    continue
            else:
                baseNum = baseNum/10
        if num != 0:
            romanStr = romanStr + base[num-1]
        return romanStr
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值