标签:target nums int backtrace result 回溯 494 Leetcode
labuladong讲解
先使用简单的回溯算法解决问题
然后添加哈希表作为备忘录,解决回溯中的重叠子问题
最后通过推导得出状态转移,使用动态规划解决问题
494. 目标和(中等)
题目:
给你输入一个非负整数数组 nums
和一个目标值 target
,现在你可以给每一个元素 nums[i]
添加正号 +
或负号 -
,请你计算有几种符号的组合能够使得 nums
中元素的和为 target
。
比如说输入 nums = [1,3,1,4,2], target = 5
,算法返回 3,因为有如下 3 种组合能够使得 target
等于 5:
-1+3+1+4-2=5
-1+3+1+4-2=5
+1-3+1+4+2=5
思路:
简单的回溯算法
递归遍历+num[i]以及-num[i]
class Solution { public: int findTargetSumWays(vector<int>& nums, int target) { if(nums.size()==0) return 0; result=0; backtrace(nums,0,target); return result; } void backtrace(vector<int>& nums,int n,int target){ // base case if(n==nums.size()){ if(target==0){ // 说明恰好凑出 target result++; } return; } // 给 nums[i] 选择 + 号 target-=nums[n]; // 穷举 nums[i + 1] backtrace(nums,n+1,target); // 撤销选择 target+=nums[n]; // 给 nums[i] 选择 - 号 target+=nums[n]; // 穷举 nums[i + 1] backtrace(nums,n+1,target); // 撤销选择 target-=nums[n]; } int result; };
标签:target,nums,int,backtrace,result,回溯,494,Leetcode 来源: https://www.cnblogs.com/zl1991/p/15949509.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。