1. 程式人生 > >【python】【leetcode】【演算法題目12—Integer to Roman】

【python】【leetcode】【演算法題目12—Integer to Roman】

一、題目描述

題目原文:

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

(給出數字1~3999中的一個數字,把它轉化為羅馬數字輸出)

二、題目分析

思路:建立一個字典,將1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000,2000,3000對應的

羅馬數字以鍵值對的形式存放在字典裡。將輸入的數字逐位(從個位到千位)加權(個位*1,十位*10,百位*100,千位*1000)計算後,

依次從字典中取出對應的羅馬數字以字串的形式累加在一起輸出即可。

三、Python程式碼

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        value_dic = {1 : 'I', 2 : 'II', 3 : 'III', 4 : 'IV', 5 : 'V', 6 : 'VI', 7 : 'VII', 8 : 'VIII', 9 : 'IX',
                     10 : 'X', 20 : 'XX', 30 : 'XXX', 40 : 'XL', 50 : 'L', 60 : 'LX',  70 : 'LXX', 80 : 'LXXX', 90 : 'XC',
                     100 : 'C', 200 : 'CC', 300 : 'CCC', 400 : 'CD', 500 : 'D', 600 : 'DC', 700 : 'DCC', 800 : 'DCCC', 900 : 'CM',
                     1000 : 'M', 2000 : 'MM', 3000 : 'MMM'}
        numplace = []
        count = 0
        while num > 0:
            temp = num % 10
            if temp != 0 :
                numplace.append(temp * 10 ** count)
            num = num / 10
            count += 1
        numplace.reverse()
        result = []
        for i in range(0, len(numplace)):
            result.append(value_dic[numplace[i]])
        result = ''.join(result)
        return result

四、其他