数组里面的数字的组合为某个和以及二叉树的某个路径的和为某值的全部路径
2017-05-08 20:50
246 查看
这种类型的题目有两种,
第一种情况下可以对里面的数字重复使用,
第二种情况,组合成的数组里面的数字不允许重复,
第一种情况下可以对里面的数字重复使用,
vector<vector<int>> vec; vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); vector<int> local; check(candidates,target,0,local); return vec; } void check(vector<int>& a,int target,int index,vector<int> &local) { if(target==0) { vec.push_back(local); return; } for(int i=index;i!=a.size()&&target>=a[i];i++) { local.push_back(a[i]); check(a,target-a[i],i,local); local.pop_back(); } }
第二种情况,组合成的数组里面的数字不允许重复,
vector<vector<int>> vec; vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); int len = candidates.size(); if(len==0) return vec; vector<int> local; check(candidates,0,target,local); return vec; } void check(const vector<int>& a,const int& index,int target,vector<int>& local) { if(target==0) { vec.push_back(local); return; } else { for(int j = index;j<a.size();j++) { if(a[j]>target) return; if(j && a[j]==a[j-1] && j>index) continue; local.push_back(a[j]); check(a,j+1,target-a[j],local); local.pop_back(); } } }
相关文章推荐
- 剑指Offer面试题39二叉树的深度(以及判断平衡二叉树),面试题40数组中只出现一次的数字
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- 题目,得到某个数组,比如【1,2,3】 获得其全部的排列组合,包括1个数字的。2个数字的,和三个数字的等等
- 将一个数组里面的组合全部列出
- 一道Amazon经典的题目,经常会考到,给一个target数字以及一个数组,求所有的加起来为这个数字的组合
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象
- Java有N个数字的int类型数组,如何获取数量最多并且数字最大的数以及数量
- 把一个数组的组合全部列出
- sizeof求struct各种组合的长度,以及指针,字符数组的长度
- 列出数组中取出的数的全部组合(用递归实现)
- 列出一个数组里面的重复数字
- m个数字任选n个数组进行组合
- 数字排列组合程序,以及程序优化的切身感受
- 将数组里面的奇数全部排在前面,偶数排在后面
- Android学习 之 Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象,如图像
- 取a数组里面的8个数字!让他们结果相加等于1979970
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 把一个数组里的组合全部列出来.
- android EditText里面嵌入两个按钮,通过按钮可以加减EditText里的数字,组合自定义控件。