整数转罗马数字

文章提供了两种Python代码实现将整数转换为罗马数字的方法,一种基于列表和条件判断,另一种采用贪心算法和哈希表。对于Python3.5以前的版本,由于字典无序性,可以改用两个有序列表来保证转换的正确性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

解题思路

  1. 设置list列表
  2. num数值最大为3999,从千位开始转,将对应数字的罗马数字加入列表list
  3. 最后将list转成str

代码

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        ans = []
        a = num / 1000
        for i in range(a):
            ans.append("M")
        b = (num - (num / 1000) * 1000) / 100
        if b == 4:
            ans.append("CD")
        elif b == 9:
            ans.append("CM")
        elif b >= 5 and b < 9:
            ans.append("D")
            for i in range(b-5):
                ans.append("C")
        elif b < 4:
            for i in range(b):
                ans.append("C")
        c = (num - a * 1000 - b * 100) / 10
        if c == 4:
            ans.append("XL")
        elif c == 9:
            ans.append("XC")
        elif c >= 5 and c < 9:
            ans.append("L")
            for i in range(c-5):
                ans.append("X")
        elif c < 4:
            for i in range(c):
                ans.append("X")
        d = num % 10
        if d == 4:
            ans.append("IV")
        elif d == 9:
            ans.append("IX")
        elif d >=5 and d < 9:
            ans.append("V")
            for i in range(d-5):
                ans.append("I")
        elif d < 4:
            for i in range(d):
                ans.append("I")
        return "".join(ans)

贪心算法:
将特殊情况以及所有的字符加入哈希表,遍历哈希表

class Solution:
    def intToRoman(self, num: int) -> str:
        # 使用哈希表,按照从大到小顺序排列
        hashmap = {1000:'M', 900:'CM', 500:'D', 400:'CD', 100:'C', 90:'XC', 50:'L', 40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'}
        res = ''
        for key in hashmap:
            if num // key != 0:
                count = num // key  # 比如输入4000,count 为 4
                res += hashmap[key] * count 
                num %= key
        return res

作者:z1m
链接:https://leetcode.cn/problems/integer-to-roman/solution/tan-xin-ha-xi-biao-tu-jie-by-ml-zimingmeng/

上面的代码运行时我遇到了问题,查看评论区,字典有序是python3.5以后新加的功能。可以利用两个list实现有序。代码如下

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        list1=[1000,900,500,400,100,90,50,40,10,9,5,4,1]
        list2=['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']
        res = ''
        for i in range(len(list1)):
            while num >= list1[i]:
               res += list2[i]
               num -= list1[i]
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值