LeetCode 揹包 目標和

2022-08-20 08:21:13 字數 803 閱讀 1894

給定乙個非負整數陣列,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。

說明:

假設我們將陣列分為兩部分,兩部分的和分別為 x,y,陣列中所有元素的和為 sum,則有 x + y = sum, x - y = s,可得 x = (sum + s) / 2. 所以,問題就變為了陣列能否分為兩部分,其中一部分的和為 (sum + s) / 2。可以使用和等和子集一樣的方法來做。

**如下:

class solution }}

return dp[nums.size()-1][target];

}};

空間複雜度優化:

使用和等和子集一樣的方法對空間複雜度進行優化:

class solution 

}return dp[target];

}};

leetcode 494目標和 揹包dp

class solution def findtargetsumways self,nums,s int dp i j means solutionnums n len nums sum max sum nums sum min sum max dp dp 0for in range s 1 for...

0 1揹包 LeetCode 494 目標和

494.目標和 給定乙個非負整數陣列,a1,a2,an,和乙個目標數,s。現在你有兩個符號 和 對於陣列中的任意乙個整數,你都可以從 或 中選擇乙個符號新增在前面。返回可以使最終陣列和為目標數 s 的所有新增符號的方法數。示例 1 輸入 nums 1,1,1,1,1 s 3 輸出 5 解釋 1 1 ...

目標和 揹包問題

給定乙個非負整數陣列,a1,a2,an,和乙個目標數,s。現在你有兩個符號 和 對於陣列中的任意乙個整數,你都可以從 或 中選擇乙個符號新增在前面。返回可以使最終陣列和為目標數 s 的所有新增符號的方法數。示例 輸入 nums 1,1,1,1,1 s 3 輸出 5 解釋 1 1 1 1 1 3 1 ...