Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题是一道关于数学题。将整数转化成罗马数字。
- 罗马字符常规有7个字符,特殊的有6个。
- 整数范围在1到3999
二、思路分析:
我们拿到本题,首先要熟悉整数转化罗马数字的方法,进行演算找寻规律,我们以81为例:
拿到一个整数,需要从罗马数字最大进行减法运算,直到该整数小于罗马数字序列对应最小值。
根据演算步骤,我们解答该题思路就有了:
- 首先将罗马数字符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记录如下:
时间复杂度O(1),最大循环次数15次,可以忽略。空间复杂度O(1)。
本题还要使用纯数学的方法,进行转化罗马数字。
以上是本期内容,欢迎大佬们点赞评论,下期见~~~