1、题目:
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
如:
输入: "XLVIII"
输出: 48
解释: X= 10, L = 50,III = 3.【X在L前:XL则表示40】
2、思路:
分治法:
(1)分:对半分【k=len(s)//2】,left=函数(s[:k]),right=函数(s[k:]),
(2)治:只有一个字符时返回值
(3)并:分开的部分,如果s【k-1】比s【k】小,结果等于left+right-2*s【k-1】,否则left+right
代码:
def romanToInt(s): """ :type s: str :rtype: int """ a=['I','V','X','L','C','D','M'] b=[1,5,10,50,100,500,1000] dic=dict(zip(a,b)) if len(s)==0: return 0 elif len(s)==1: return dic[s] else: k=len(s)//2 left=romanToInt(s[:k]) right=romanToInt(s[k:]) if dic[s[k-1]]<dic[s[k]]: return left+right-2*dic[s[k-1]] else: return left+right