这是leetcode中494. 目标和 ,难度为 中等,
这道题目使用的是回溯算法,回溯算法的话,就是同一个起点下一个有不同的走向
比如下图,可以是 0>1>3 , 0>1>4, 在1的时候可以进行回溯
题目描述
给你一个整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。
示例 1:
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3
示例 2:
输入:nums = [1], target = 1
输出:1
提示:
1 <= nums.length <= 20
0 <= nums[i] <= 1000
0 <= sum(nums[i]) <= 1000
-1000 <= target <= 1000
通过次数170,348提交次数346,660
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/ta…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法实现
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var findTargetSumWays = function(nums, target) {
//想象怎么使用回溯算法 20点06分
//就是对一个数字进行相减或者相加
var len = nums.length
var res = 0
var shenru = (sum,i)=>{
if(i == nums.length){
if(sum === target) res++
return
}
shenru(sum+nums[i],i+1)
shenru(sum-nums[i],i+1)
}
shenru(0,0)
return res
//20点11分
};
复杂度分析
时间复杂度:O(2^n)
空间复杂度:O(n)
最后
这是我2022年分享的「leetcode」第NO.8篇文章。