494. 目标和

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了494. 目标和相关的知识,希望对你有一定的参考价值。

494. 目标和

思路

  • 该表达式由 加法和 x 与 减法和 sum-x 构成;题目求 x - (sum - x) = target,x = (target + sum) / 2;
  • 将 加法和 x 作为背包重量,转换为01背包问题
  • 有两种情况无解,1. (target + sum) 为奇数不能整除,得不到 x。例如 【1,1】的 sum = 2,target = 1; 1+2为奇数,无解。2. 绝对值 target 大于 sum,例如 target = 10,sum = 2;
  • dp[0] = 1;求组合数/背包装法的递推公式一般为 dp[ j ] += dp[ j - nums[ i ] ]
class Solution {
    public int findTargetSumWays(int[] nums, int target) {
        int sum = 0;
        for(int num : nums) sum += num;
        if(Math.abs(target) > sum) return 0;
        if((target + sum) % 2 == 1) return 0;
        int size = (target + sum) / 2;
        int[] dp = new int[size + 1];
        dp[0] = 1;
        for(int i = 0;i < nums.length;i++){
            for(int j = size;j >= nums[i];j--){
                dp[j] += dp[j - nums[i]]; 
            }
        }
        return dp[size];
    }
}

以上是关于494. 目标和的主要内容,如果未能解决你的问题,请参考以下文章

494. 目标和

494. 目标和

题目地址(494. 目标和)

494. 目标和

494. 目标和 回溯法+动态规划

494. 目标和