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

本文介绍了一种将整数转换为罗马数字的算法实现,通过建立数字与罗马字符之间的映射关系,实现了1到3999范围内整数到罗马数字的有效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

题目原文:

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

四、其他

题目链接:https://leetcode.com/problems/integer-to-roman/

Runtime: 130 ms

想法不够优化,欢迎大家留言交流~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值