Leetcode 494. 目标和(中等)回溯算法
2022/3/1 14:23:02
本文主要是介绍Leetcode 494. 目标和(中等)回溯算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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; };
这篇关于Leetcode 494. 目标和(中等)回溯算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享