LeetCode 46 47....排列问题
2016-04-21 10:51
423 查看
//回溯问题的应用
/** 46:排列问题:给出一个包含不同数字的集合,返回这个集合的所有排列 For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. 使用递归方法返回其所有排列 */ void permuteRecuresive(vector<int>&nums,int begin,vector<vector<int>>&res){ if(begin==nums.size()){ res.push_back(nums); return; } for(int i=begin;i<nums.size();i++){ swap(nums[begin],nums[i]); permuteRecuresive(nums,begin+1,res); //reset swap(nums[begin],nums[i]); } } vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>>res; permuteRecuresive(nums,0,res); return res; }
/** leetCode 47:现在给出的数组有重复数字,还是返回他们的所有可能的组合 For example, [1,1,2] have the following unique permutations: [1,1,2], [1,2,1], and [2,1,1]. */ void permuteRecuresive2(vector<int>nums,int begin,vector<vector<int>>&res){ if(begin==nums.size()-1){ res.push_back(nums); return; } for(int i=begin;i<nums.size();i++){ if(i!=begin&&nums[i]==nums[begin])//如果为重复元素,skip continue; swap(nums[begin],nums[i]);//每次都确保子串有序 permuteRecuresive2(nums,begin+1,res); } } vector<vector<int>> permuteUnique2(vector<int>& nums) { vector<vector<int>> res; sort(nums.begin(),nums.end());//排序令重复数字相邻 permuteRecuresive(nums,0,res); return res; }
/***LeetCode 216. Combination Sum III 输入一个数字k(1-9),和另一个数n,在{1~9}序列中找到所有 尺寸为k且序列和为n的组合,比如: Input: k = 3, n = 9 Output: [[1,2,6], [1,3,5], [2,3,4]] */ void combinations(vector<vector<int>>&res,vector<int>vs,int k,int n){ if(vs.size()==k&&n==0){ res.push_back(vs); return; } if(vs.size()<k){ for(int i=vs.empty()?1:vs.back()+1;i<=9;i++){ if(n-i<0) break; vs.push_back(i); combinations(res,vs,k,n-i); vs.pop_back(); } } } vector<vector<int>> combinationSum3(int k, int n) { vector<vector<int>>res; vector<int>vs; combinations(res,vs,k,n); return res; }
相关文章推荐
- Android中pendingIntent的深入理解
- Swoole框架介绍
- django应用
- 【PHP】进一法取整、四舍五入取整、忽略小数等的取整数方法大全
- POJ1862-Stripies
- 重新学习《C++Primer5》第7章-类
- [IOS/翻译]Cocoa Touch Layer
- Python 首字母大写.map()
- MSP430 IO 使用
- 技术,已经很遥远
- xCode中常见的错误分析
- 【追求进步】不用加减乘除做加法
- C#基础知识之自定义类
- ubuntu下ndnsim1.0的安装
- 235. Lowest Common Ancestor of a Binary Search Tree
- 调用相机或相册返回图片的地址
- groovy 学习笔记
- 反射dll里的函数
- 使用 jar命令 简单的修改 jar包
- CombineMeshes