1
题目描述
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。如输入3,输出‘CCC’,输入2019,输出‘MMXIX’。罗马数字与整数对应关系如下:
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
2
2
贪心算法
贪心算法指对于一下找不到最优解的复杂问题,把它拆分成几个小问题,然后分别求出当前看来最好的选择,并将这些局部最优解当作整个问题的最优解。使用贪心算法,必须注意两个问题,一是要保证某个状态以前的过程不会影响以后的状态,只与当前状态有关(无后效性);二是要注意贪心算法得到的解是局部最优解,不一定是全局最优解。此题中,贪心算法的应用体现在我们每次选择最大的数表示,比如300优先选择3个100而不是6个50。
3
python代码实现
首先还是先建立一个字典,从大到小记录整数和罗马字母的关系,然后通过循环对表中取值进行遍历。class Solution: def intToRoman(self, num: int) -> str: RomanDict = {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'} s = '' for i in RomanDict: if num // i != 0: s = s+RomanDict[i]*(num//i) num = num%i return s
本题还可以通过穷举法实现,思想虽然不复杂但是写的列表略长,暂时不进行展示啦~