【每日一题】494. 目标和 回溯算法

324 阅读1分钟

这是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篇文章。