【codewars】Roman Numerals Encoder

instruction

Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer.

Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLXVI.

Example:

这里写图片描述

my solution

def solution(n):
    # TODO convert int to roman string
    symbolArr = [["I","V"],["X","L"],["C","D"],["M"]]
    strN = str(n).zfill(4)
    symbol = "M"*int(strN[0])
    for i in range(2,-1,-1):
        valueArr = ["", symbolArr[i][0], symbolArr[i][0] + symbolArr[i][0],symbolArr[i][0] + symbolArr[i][0] + symbolArr[i][0], symbolArr[i][0] + symbolArr[i][1],symbolArr[i][1],symbolArr[i][1] + symbolArr[i][0], symbolArr[i][1] + symbolArr[i][0] + symbolArr[i][0],symbolArr[i][1] + symbolArr[i][0] + symbolArr[i][0] + symbolArr[i][0],symbolArr[i][0] + symbolArr[i + 1][0]]
        symbol = symbol + valueArr[int(strN[(3-i)])]
    return symbol

best solution from others

def solution(n):
    roman_numerals = {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'}
    roman_string = ''
    for key in sorted(roman_numerals.keys(),reverse=True):
        while n >= key:
            roman_string += roman_numerals[key]
            n -= key
    return roman_string

技巧点

针对原表能够重新构造
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000

roman_numerals = {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’}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sysu_lluozh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值