罗马数字转换python_阿拉伯数字转换成罗马数字

阿拉伯数字转换成罗马数字

Integer to Roman

给出一个阿拉伯数字,返回此数字的罗马数字表示

Given an integer, convert it to a roman numeral.

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

example 1

input: CCCLXXXIX

output: 389

思路

用表记录关键的罗马数字和阿拉伯数字,将输入循环除以1000,900,500 ... 这些关键数字,余数为y,将对应的罗马字符串加y次

看到大神的思路,也是查表,但更加精妙,将数字分解为千位,百位,十位和个位,然后查表将字符串相加,很神奇的思路,刚看到的时候惊叹了一下,代码如下

代码

class Solution(object):

# 思路1

def intToRoman1(self, num):

"""

:type num: int

:rtype: str

"""

arabic = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]

roman = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']

ret = ''

i = 0

while num:

yu = num // arabic[i]

ret += roman[i] * yu

num = num - yu * arabic[i]

i += 1

return ret

# 神奇的思路2

def intToRoman2(self, num):

M = ['', 'M', 'MM', 'MMM'] #0, 1000, 2000, 3000

C = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'] #0, 100, 200, ... , 900

X = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'] #0, 10, 20, ... , 90

I = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] #0, 1, 2, ... , 9

return M[num // 1000] + C[(num % 1000) // 100] + X[(num % 100) // 10] + I[num % 10]

本题以及其它leetcode题目代码github地址: github地址

文章来源:segmentfault,作者:冯了个杰。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:william.shi#ucloud.cn(邮箱中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

3bd16c71c09c78ecd52251f00b4c6dfa.png

后台-系统设置-扩展变量-手机广告位-内容正文底部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值