罗马数字转整数
class Solution:def romanToInt(self, s: str) -> int:
f=0
number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
#特殊的六种情况
temp=s
for each in special_one:
if each in s:
f+=special_one.get(each)
temp.replace(each,'')
for each in set(temp):
A = temp.count(each)
f += A* number_dict.get(each)
return f
测试用例:"IV"
测试结果:10
期望结果:4
请问为啥出的结果不对啊
函数中有两次迭代
for each in special_one:
if each in s:
f+=special_one.get(each)
temp.replace(each,'')
第一次迭代f=4符合预期
再经历第二次迭代
for each in set(temp):
A = temp.count(each)
f += A* number_dict.get(each)
f变成了10
如果你只是测"IV" 就太简单了
我假设你是测试不同数量的 s
直接用while 就搞定了
number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
s = list(s)
n = 0
while s:
if len(s) == 1:
n += number_dict]
del s
elif s+s in special_one:
n += special_one+s]
del s[:2]
else:
n += number_dict]
del s
print(n)
稍微改下自己放进类里面去 逃兵 发表于 2020-11-26 13:16
函数中有两次迭代
第一次迭代f=4符合预期
f=0
b=0
number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
#特殊的六种情况
temp=s
for each in special_one:
if each in temp:
f+=special_one.get(each)
b=temp.replace(each,'')
for i in set(b):
A = b.count(i)
f += A* number_dict.get(i)
return f
他现在给我报错了 说红色这句话 ‘int’对象不可迭代,但我寻思set()后不是一个列表吗?
这个咋解决啊? 本帖最后由 逃兵 于 2020-11-27 14:52 编辑
贾雨村 发表于 2020-11-26 22:45
f=0
b=0
number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
按需求重写了份代码
执行逻辑,拆分每一个字母,将每一个字母转化成数字,最后加个0补位
左边数字比右边大的话就减,否则加
class Solution:
def romanToInt(self, s: str) -> int:
f = 0
number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
temp = s
lst = for i in temp]+
for i in range(len(lst)-1):
if lst < lst:
f-=lst
else:
f+=lst
return f
页:
[1]