147.(494)目标和

题目描述:

给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。

返回可以使最终数组和为目标数 S 的所有添加符号的方法数。

示例:

输入:nums: [1, 1, 1, 1, 1], S: 3
输出:5
解释:

-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

一共有5种方法让最终目标和为3。

思路:

递归

代码:

class Solution {
public:
    int res=0;
    int findTargetSumWays(vector& nums, int S) {
        recursion(nums,0,0,S);
        return res;
    }
    void recursion(vector&nums,int i,int sum,int S)
    {
        if(i==nums.size())
        {
            if(sum==S) res++;
            return;
        }
        recursion(nums,i+1,sum+nums[i],S);
        recursion(nums,i+1,sum-nums[i],S);
    }
};

执行效率:

执行用时:1800 ms, 在所有 C++ 提交中击败了22.11%的用户

内存消耗:8.9 MB, 在所有 C++ 提交中击败了98.26%的用户

你可能感兴趣的:(LeetCode)