494.目标和

张开发
2026/4/19 21:37:48 15 分钟阅读

分享文章

494.目标和
package org.example; class Solution { public int findTargetSumWays(int[] nums, int target) { // 计算数组 nums 中所有元素的和 int sum 0; for (int num : nums) { sum num; } // 判断是否有符合条件的表达式 if (Math.abs(target) sum) { return 0; } if ((sum target) % 2 ! 0) { return 0; } // 计算背包的容量 int bagSize (sum target) / 2; // dp 数组 int[][] dp new int[nums.length][bagSize 1]; // 初始化 dp 数组 // 第一行 if (nums[0] bagSize) { // 使用物品 0 只能装满容量恰好为物品 0 所需容量的背包 dp[0][nums[0]] 1; } // 第一列 int zeroCount 0; for (int i 0; i nums.length; i) { if (nums[i] 0) { zeroCount; } dp[i][0] (int)Math.pow(2, zeroCount); } // 填充 dp 数组 for (int i 1; i nums.length; i) { for (int j 0; j bagSize; j) { if (j nums[i]) { // 放得下 i 号物品 dp[i][j] dp[i - 1][j] // 不放 i 号物品 dp[i - 1][j - nums[i]]; // 放 i 号物品 } else { // 放不下 i 号物品 dp[i][j] dp[i - 1][j]; // 不放 i 号物品 } } } return dp[nums.length - 1][bagSize]; } }

更多文章