记录 1 道算法题
目标和
要求:提供一个数组和 target,里面是正整数。然后将里面的每一个数作为正数或者负数,相加总和为 target。输出方案的个数。
比如:nums = [1,1,1,1,1], target = 3
,输出:5
- 回溯
每一个数都有可能作为正数和负数,即每个数都有两种情况,所以可以做递归处理,让执行栈维护方案。
function findTargetSumWays(nums, target) {
let count = 0
// 定义一个递归的函数
const walk = (nums, i, sum, target) => {
if (i > nums.length) return
// 最后一个的时候,判断方案是否合格
if (i === nums.length && sum === target) {
count++
return
}
// 正
walk(nums, i + 1, sum + nums[i], target)
// 负
walk(nums, i + 1, sum - nums[i], target)
}
walk(nums, 0, 0, target)
return count
}
- 动态规划
略