获取列表的索引,其值加起来给定的数字

时间:2016-04-13 19:56:42

标签: python python-3.x

我有一个值列表,我输入了一个数字。该函数必须返回列表中的索引,其值加起来为数字。问题是列表包含重复的数字,返回的索引不应该相同。这是我的,但解决方案看起来不干净。还有更好的方法吗?

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]这不是我想要的。

1 个答案:

答案 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");
}