动态规划-494. Target Sum
来源:互联网 发布:蓝牙打印机测试软件 编辑:程序博客网 时间:2024/06/10 01:20
题目:
You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols +
and -
. For each integer, you should choose one from +
and -
as its new symbol.
Find out how many ways to assign symbols to make sum of integers equal to target S.
Example 1:
Input: nums is [1, 1, 1, 1, 1], S is 3. Output: 5Explanation: -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 = 3There are 5 ways to assign symbols to make the sum of nums be target 3.题目解读:给定一个非负整数数组和一个目标值,你可以给这些数字赋予正负号。问有多少种赋值方式可以使这些数字的和等于目标值
DFS Soulutionclass Solution { public int findTargetSumWays(int[] nums, int S) { return helper(nums,S,0); } public int helper(int[] nums,int target,int start){ if(start == nums.length){ //结束条件 if(target==0) return 1; else return 0; } int count = 0; count += helper(nums,target-nums[start],start+1);//+号情况 count += helper(nums,target+nums[start],start+1);//-号情况 return count; }}
//DP Soulution/*Let P be the positive subset and N be the negative subset sum(P) - sum(N) = targetsum(P) + sum(N) + sum(P) - sum(N) = target + sum(P) + sum(N) 2 * sum(P) = target + sum(nums)该问题可以转化为寻找一个子集合P.使得sum(P) = (target+sum(nums))/2注意target+sum(nums)一定是偶数。这可以作为一个快速判断输入是否有解的依据*/class Solution{ public int findTargetSumWays(int[] nums, int S) { int sum = 0; for(int i = 0; i < nums.length; i++){ sum += nums[i]; } return (S > sum || (sum+S) % 2 > 0)? 0 : subSum(nums,(sum+S)/2); } public int subSum(int[] nums, int target){ int[] dp = new int[target+1]; dp[0] = 1; //元素不可重复 for(int num : nums) for(int j = target; j >= num; j--) dp[j] += dp[j-num]; return dp[target]; }}
阅读全文
0 0
- 动态规划-494. Target Sum
- 494. Target Sum(动态规划)
- leetcode -- 494. Target Sum【数学转化 + 动态规划】
- 动态规划编程实例——LeetCode 494.Target Sum
- leetcode 494. Target Sum 深度优先遍历DFS + DP动态规划
- Max Sum(动态规划)
- Maximum sum-动态规划
- hdu1003MAX sum(动态规划)
- 动态规划--Maximum sum
- 动态规划: HDU1003Max Sum
- LeetCode 494. Target Sum
- [LeetCode]494. Target Sum
- 494. Target Sum
- [leetcode]494. Target Sum
- 494. Target Sum
- Leetcode 494. Target Sum
- 494. Target Sum -Medium
- 494. Target Sum
- 序列化 保存到一个文件
- 剑指offer之八---变态跳台阶
- 动态规划解152. Maximum Product Subarray
- 函数指针作函数参数/用函数指针调用函数
- Mohican_9/21 基本数据类型
- 动态规划-494. Target Sum
- leetcode--BinarySearch
- android内存泄露:handler
- 算法排序(1):总述
- rdd,dataframe,dataset之间的区别
- 水题
- MySQL死锁问题分析及解决方法实例详解
- 漫漫长路的开始
- 浅谈大型web系统架构