给定不同数字的集合,返回所有可能的排列。
来源:互联网 发布:淘宝企业店铺开店新规 编辑:程序博客网 时间:2024/05/21 20:25
本题源自leetcode 46
---------------------------------------------------------------------------
思路:回溯法
1 对数组排序,2定义回溯函数 3 定义递归结束条件,即起始位置大于等于数组大小。 4 每次交换俩个数,递归后在交换回来,保证下次递归。
代码
vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; int n = nums.size(); if(n == 0) return res; sort(nums.begin(),nums.end()); backPath(nums,res,0); return res; } void backPath(vector<int>& nums,vector<vector<int>>& res,int start){ if(nums.size() <= start){ res.push_back(nums); return; } for(int i = start; i < nums.size(); i++){ swap(nums[start],nums[i]); backPath(nums,res,start + 1); swap(nums[start],nums[i]); } }
2 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
去重复,只交换一次
代码:
void recursion(vector<int> num, int start, vector<vector<int> > &res) { if (start == num.size()) { res.push_back(num); return; } for (int k = start; k < num.size(); k++) { if (start != k && num[start] == num[k]) continue; swap(num[start], num[k]); recursion(num, start+1, res); } } vector<vector<int> > permuteUnique(vector<int> &num) { sort(num.begin(), num.end()); vector<vector<int> >res; recursion(num, 0, res); return res; }
思路2
void recursion(vector<int> nums, int start, vector<vector<int> > &res) { if (start == nums.size()) { res.push_back(nums); return; } unordered_set<int> mp; for (int k = start; k < nums.size(); k++) { if(mp.count(nums[k]) > 0) continue; mp.insert(nums[k]); swap(nums[start], nums[k]); recursion(nums, start+1, res); swap(nums[start], nums[k]); } } vector<vector<int> > permuteUnique(vector<int> &num) { sort(num.begin(), num.end()); vector<vector<int> >res; recursion(num, 0, res); return res; }
阅读全文
0 0
- 给定不同数字的集合,返回所有可能的排列。
- 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 给定一组不同的整数,S返回所有可能的子集。
- 给定一串数字和运算符,返回所有可能的结果,有效的运算符是+,
- 给定一个字符串,输出其所有的可能排列
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 输出给定集合的所有排列与组合-python
- java求子集和,给定数组求这个数组中某些数字相加等于某个值的所有可能集合
- 给定字符串的所有排列
- 所有不同的排列
- 给定一个数字m和数字n,输出相应的所有排列
- 给定两个整数n和k,返回1 ... n中k个数的所有可能组合。
- 打印所有可能的集合
- 给定一系列数字,请打印出这些数字的所有排列,例如1,2,2,3,4,请列出所有的排列
- 输出所有可能的全排列
- 46.排列的所有可能组合
- 删除数组中所有给定的数字。
- 数据结构实验之栈与队列十一:refresh的停车场
- 「自然语言处理」如何快速理解?有这篇文章就够了!
- 微信浏览器与企业微信浏览器user agent比较
- 工作中的总结(1)【框架、插件、跨域、Ajax、时间、模板下载、页面打印、图片上传】
- 下载公众号文章中的图片,php开发公众号应用
- 给定不同数字的集合,返回所有可能的排列。
- 利用开源工具TempestSDR实现屏显内容远程窃取
- fastdfs-client-java操作fastdfs5.0.4
- git基本命令学习(一)
- 数据结构实验之串一:KMP简单应用
- 在全局下存全局变量注意点
- Python数据分析实战 | 数据挖掘人门
- 数据结构实验之串三:KMP应用
- js点击下载跳转iOS或安卓