【LeetCode】12. 整数转罗马数字

115 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题是一道关于数学题。将整数转化成罗马数字。
    • 罗马字符常规有7个字符,特殊的有6个。
    • 整数范围在1到3999

二、思路分析:

我们拿到本题,首先要熟悉整数转化罗马数字的方法,进行演算找寻规律,我们以81为例:

image.png

拿到一个整数,需要从罗马数字最大进行减法运算,直到该整数小于罗马数字序列对应最小值。

根据演算步骤,我们解答该题思路就有了:

  • 首先将罗马数字符roman_str与所对应的整数数字roman_num,使用两个列表一一对应存储起来,从大到小。
  • 使用for循环遍历roman_num,整数num与roman_num里的数字最大值开始做减法运算
  • 当整数num大于roman_num value时,进行减法运算,roman进行连接roman_num value所对应的罗马字符roman_str
  • 当整数num小于roman_num value时,则取下一个value,进行减法运算。
class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """

        roman_str = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
        roman_num = [1000,900,500,400,100,90,50,40,10,9,5,4,1]

        roman = ""

        for i in range(len(roman_num)):
            while num >= roman_num[i]:

                num -=roman_num[i]
                roman +=roman_str[i]
            if num == 0:
                break
        return roman

三、总结:

本期,使用两个列表映射来储存罗马字符和整数关系,提交AC记录如下:

image.png

时间复杂度O(1),最大循环次数15次,可以忽略。空间复杂度O(1)。

本题还要使用纯数学的方法,进行转化罗马数字。

以上是本期内容,欢迎大佬们点赞评论,下期见~~~