494. 目标和【力扣】

这是一篇关于如何利用动态规划求解数组元素前缀符号组合,使得表达式和等于特定目标值的问题分析。博客内容包括题意理解,详细阐述了状态量定义为前i个数字和等于j的数量,并给出了状态转移方程。此外,还提供了相关链接以供深入学习。
摘要由CSDN通过智能技术生成

题意理解

给定一数组,在每个数前增加+,-符号构成表达式,求和等于S的数量。

问题分析

动规

状态量是前i个数字,和等于j的数量。

状态转移方程是前i个数字,和等于j的数量等于前i-1个数字,和等于j-当前数字的数量 + 前i-1个数字,和等于j+当前数字的数量。

其他

链接

    int findTargetSumWays(vector<int>& nums, int S) {
        int sum = accumulate (nums.begin(), nums.end(), 0);    //计算数组和
        if (S > sum || S < -sum) {    //目标和不在正负数组和之间
            return 0;    //结束
        }
        int len = nums.size();    //数组长度
        vector<vector<int>> dp(len + 1, vector<int>(2 * sum + 1, 0));    //dp[i,j]表示前i个元素和为j-sum的数量,这是将-sum,sum化为0,2*sum
        
        dp[0][sum] = 1;    //预制0个元素,和为0(对应j=sum)的数量为1.

        
        for (int i = 1; i != len + 1; i ++) {    //遍历前i个元素,从i=1开始
            for (int j = 0; j != 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值