leetcode刷题(第494题)——目标和

x33g5p2x  于2022-04-18 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(487)

一、题目

  1. 给你一个整数数组 nums 和一个整数 target
  2. 向数组中的每个整数前添加 '+' '-' ,然后串联起所有整数,可以构造一个 表达式
  3. 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"
  4. 返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

二、示例

  1. 输入:nums = [1,1,1,1,1], target = 3
  2. 输出:5
  3. 解释:一共有 5 种方法让最终目标和为 3
  4. -1 + 1 + 1 + 1 + 1 = 3
  5. +1 - 1 + 1 + 1 + 1 = 3
  6. +1 + 1 - 1 + 1 + 1 = 3
  7. +1 + 1 + 1 - 1 + 1 = 3
  8. +1 + 1 + 1 + 1 - 1 = 3
  1. 输入:nums = [1], target = 1
  2. 输出:1

三、思路
本题使用递归算法,记录当前下标,并且当前位置的数存在两种状态,一种是加,另一种是减。然后我们需要明白递归的终止条件,就是当前下标等于数组的长度-1
四、代码展示

  1. /**
  2. * @param {number[]} nums
  3. * @param {number} target
  4. * @return {number}
  5. */
  6. var findTargetSumWays = function (nums, target) {
  7. let count = 0
  8. let len = nums.length - 1
  9. const rec = (sum, index) => {
  10. if (index === len) {
  11. if (sum === target) {
  12. count++
  13. }
  14. return
  15. } else {
  16. rec(sum + nums[index + 1], index + 1)
  17. rec(sum - nums[index + 1], index + 1)
  18. }
  19. }
  20. rec(0, -1)
  21. return count
  22. };

五、总结

相关文章