我有一个值列表,我输入了一个数字。该函数必须返回列表中的索引,其值加起来为数字。问题是列表包含重复的数字,返回的索引不应该相同。这是我的,但解决方案看起来不干净。还有更好的方法吗?
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]
这不是我想要的。
答案 0 :(得分:3)
如果对值列表进行了排序,则以下代码将执行您想要的操作。这里的诀窍是以相反的顺序走列表。
但请注意编辑和功能中的最后一次测试!
编辑:此问题称为子集求和问题(请参阅Wikipedia),并且是NP-complete。应该马上认出来,我的坏。这基本上意味着没有简单的&amp;有效解决方案最简单的解决方案是尝试所有可能的组合,但如果您的值列表很大,则完成时间过长。
$image = '/path/to/images/' . basename($_GET['src']);
if (file_exists($image)) {
echo '<img src="'. $image .'" />';
} else {
header("HTTP/1.0 404 Not Found");
}