【LeetCode-012】IntegerToRoman

1. 问题描述:

2. 解决办法:
 

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        roman = ""
        num_reverse = str(num)[::-1]
        num_order = len(str(num))
        for i in range(num_order-1, -1, -1):
            if i == 0:
                uni = int(num_reverse[i])
                if uni < 4:
                    roman += uni*"I"
                elif uni == 4:
                    roman += "IV"
                elif uni == 5:
                    roman += "V"
                elif uni == 9:
                    roman += "IX"
                else:
                    roman += "V"+"I"*(uni-5)
            elif i == 1:
                deci = int(num_reverse[i])
                if deci < 4:
                    roman += deci * "X"
                elif deci == 4:
                    roman += "XL"
                elif deci == 5:
                    roman += "L"
                elif deci == 9:
                    roman += "XC"
                else:
                    roman += "L"+"X"*(deci-5)
            elif i == 2:
                order = int(num_reverse[i])
                if order < 4:
                    roman += order*"C"
                elif order == 4:
                    roman += "CD"
                elif order == 5:
                    roman += "D"
                elif order == 9:
                    roman += "CM"
                else:
                    roman += "D"+"C"*(order-5)
            else:
                order = int(num_reverse[i])
                roman += order * "M"

        return roman

    def intToRoman2(self, num):
        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']

        i = 0
        roman = ""
        while num > 0:
            if num - nums[i] >= 0:
                roman += romans[i]
                num -= nums[i]
            else:
                i += 1
        return roman




s = Solution()
a = s.intToRoman2(58)
print(a)

3. 个人感想:
(1)方法1是完全自己写的,最直接的想法,但是这样判断过于繁琐
但是在这个过程中发现了取个位、十位等的一个方法,把int转成str,然后直接取
(2)第二种方法是从网上找的:
有多少个某个的方法,不断减它,是否大于等于

猜你喜欢

转载自blog.csdn.net/zhangjipinggom/article/details/84800385