python - 如果可以通过在列表中放置加法或减法运算来获得目标整数,则编写应返回 true 的函数
问题描述
例子 :
f(5, [5, 2]) = false. There's no way to add or subtract 5 and 2 to get 5.
f(13, [3, 9, 3, 2]) = true. 3 + 9 + 3 - 2 = 13.
f(0, []) = true
f(1, []) = false
我尝试了下面的代码,但在某些时候,它仍然崩溃了。你们有什么简单或有效的解决方案吗?
def getWays(magic_number, numbers):
if( util(numbers, 0, magic_number) > 0 ):
return True
return False
def util(numbers, i, magic_number):
n = len(numbers)
if( i >= len(numbers) and magic_number != 0 ):
return 0
if (magic_number == 0):
return 1
return util(numbers, i + 1, magic_number) + util(numbers, i + 1, magic_number - numbers[i]) + util(numbers, i + 1, magic_number + numbers[i])
if(getWays(13, [3, 9, 3, 2])):
print("True")
else:
print("False")
注意:这不是任何家庭作业或作业。我只是为了练习而尝试。
解决方案
您可以使用以下递归函数:
from operator import add, sub
def getWays(target, operands):
if not operands:
return target == 0
*remaining, operand = operands
return any(getWays(operator(target, operand), remaining) for operator in (add, sub))
以便:
print(getWays(5, [5, 2]))
print(getWays(13, [3, 9, 3, 2]))
print(getWays(0, []))
print(getWays(1, []))
会输出:
False
True
True
False
推荐阅读
- linux - 找不到使 g77 命令
- selenium - 我能够使用 xpath 找到元素。但是在执行脚本时它没有运行
- javascript - Mxgraph 如何以编程方式在形状内添加文本元素?
- python - 从数据框一列的所有行中删除 % 符号并将整个列值转换为浮点数
- image-processing - Cuda 内存分配
- java - 如何打印出 BFS 采用的路径?
- python - 计算几个 xarray 变量的平均值
- mysql - Docker 为 MySQL 创建卷
- c# - 如何使用 Response.Redirect 将 htm 页面重定向到另一个页面?
- github - AppVeyor授权操作Github账号变更