目錄
- 題目分析及優化:
- 狀態表示:
- 狀態轉移方程:
- 初始化:
- 填表順序:
- 返回值:
- 代碼呈現:
- 優化:
- 代碼呈現:
題目分析及優化:
狀態表示:
狀態轉移方程:
初始化:
填表順序:
返回值:
返回dp[n][a]
代碼呈現:
class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;int n = nums.length;for(int i = 0; i < n; i++) sum += nums[i];int a = (sum+target)/2;//湊出的容積//處理邊界條件if(a < 0 || (sum+target)%2 == 1) return 0;int[][] dp = new int[n+1][a+1];//初始化dp[0][0] = 1;for(int i = 1; i <= n; i++)for(int j = 0; j <= a; j++){dp[i][j] = dp[i-1][j];if(j >= nums[i-1])dp[i][j] = dp[i-1][j-nums[i-1]] + dp[i-1][j];}return dp[n][a];}
}
優化:
這里利用滾動數組優化,不知道看利用滾動數組優化,不知道的,看這里:鏈接: 點擊
代碼呈現:
//利用滾動數組優化:int sum = 0;int n = nums.length;for(int i = 0; i < n; i++) sum += nums[i];int a = (sum+target)/2;//湊出的容積//處理邊界條件if(a < 0 || (sum+target)%2 == 1) return 0;int[] dp = new int[a+1];//初始化dp[0] = 1;for(int i = 1; i <= n; i++)for(int j = a; j >= nums[i-1]; j--){dp[j] = dp[j-nums[i-1]] + dp[j];}return dp[a];