【发布时间】:2016-04-14 16:02:58
【问题描述】:
我有一个值列表,我输入了一个数字。该函数必须返回列表中其值加起来等于数字的索引。问题是列表包含重复的数字,并且返回的索引不应该相同。这是我所拥有的,但解决方案看起来并不干净。有没有更好的办法?
finalList = []
def getIndices(number):
values = [10,20,20,50,100,200,200,500,1000,2000,2000,5000]
for i in range(len(values)):
if values[i] == number:
if i not in finalList:
finalList.append(i)
else:
finalList.append(i-1)
return values
elif values[i] < number:
continue
else:
number = number - values[i-1]
if i-1 not in finalList:
finalList.append(i-1)
else:
finalList.append(i-2)
if number <= 0:
break
return getIndices(number)
result = getIndices(450)
print(result)
输出
[6, 5, 3]
如果我在添加之前没有检查列表,那么我会得到[6, 6, 3],这不是我想要的。
【问题讨论】:
-
首先将列表转换为
set以消除欺骗? -
@BAH 不会改变索引号吗?
-
可以有多个答案。你希望他们全部归还吗?例如,如果数字是 50,则 [0,1,2] 和 [3] 都是有效答案。
-
列表排序了吗?如果它是排序的,你至少可以忽略所有值 >= 到数字,你可以快速找到使用二分法的索引。
-
@KR29 但 10+20+20 也是 50 所以我不明白
标签: python python-3.x