【codewars】Roman Numerals Encoder
2018-01-16 21:25
441 查看
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’}
相关文章推荐
- 【Codewars】Roman Numerals Encoder 正整数转罗马数字
- [Codewars]-Roman Numerals Encoder
- Rust: codewars的Roman Numerals Encoder
- Project Euler:Problem 89 Roman numerals
- 1002 Roman numerals
- Checkio: Roman numerals
- UVa 185 - Roman Numerals
- Roman numerals 解题报告
- Project Euler:Problem 89 Roman numerals
- uva 185 Roman Numerals
- Project Euler 89:Roman numerals 罗马数字
- Rust: codewars 的Duplicate Encoder
- UVA 185 Roman Numerals
- BIT寒假练习-2013__1002:Roman numerals
- uva :185 - Roman Numerals(dfs)
- uva 185 Roman Numerals (深搜+字符串处理)
- Roman Numerals ---解题报告
- Roman numerals/Encode - Rosetta Code
- POJ 1213 Roman Numerals 笔记
- UVa 185 - Roman Numerals