[leetcode 46] Permutations------数组中元素的所有排列组合集合
来源:互联网 发布:阿里云大数据应用学院 编辑:程序博客网 时间:2024/05/22 17:35
Question:
Given a collection of distinct numbers, return all possible permutations.
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]
.
此题目是求一个没有重复数据的数组的所有元素排列组合,
思路很简单,原来的数组分为两部分,第一个元素和后面所有的元素,这样求剩下元素的排列组合即可,即求出了以第一个元素为首的的排列组合;第二步:将第一个元素依次与后面的元素交换。
我第一次实现的代码比较暴力,是固定最后一个元素,每次将当前的排列重新组合,时间有点慢。
后来发现其他人的代码实现比较简单,如下参考。
代码如下:
<span style="font-size:14px;">class Solution {public: vector<vector<int>> permute(vector<int>& nums) { /*自己实现 vector<vector<int>> res; if(nums.size() == 0) return res; int n = nums.size(); vector<int> elem(nums); if(nums.size() == 1){ res.push_back(nums); return res; } if(nums.size() == 2){ res.push_back(nums); swap(&elem[0],&elem[1]); res.push_back(elem); return res; } for(int i = n-1; i >= 0; --i){ vector<vector<int>> temp; vector<int> ele(nums); vector<int>::iterator it; int bg; swap(&ele[n-1],&ele[i]); bg = ele[n-1]; it = ele.end(); --it; ele.erase(it); temp = permute(ele); for(int j = 0; j < temp.size(); ++j){ temp[j].push_back(bg); } res.insert(res.end(),temp.begin(),temp.end()); } return res;*/ vector<vector<int>> res; create(nums,res,0); return res; } void swap(int* a,int* b){ int t = *a; *a = *b; *b = t; } void create(vector<int>& nums,vector<vector<int>> &res,int n) { if(n==nums.size()-1) res.push_back(nums); else { for(int i=n;i<nums.size();i++) { swap(&nums[i],&nums[n]); create(nums,res,n+1); swap(&nums[i],&nums[n]); } } }};</span>
0 0
- [leetcode 46] Permutations------数组中元素的所有排列组合集合
- 求一个数组元素的所有排列组合
- 【求一个数组元素的所有排列组合】
- leetcode-46、47 Permutations/II 数字的排列组合
- N个数组中所有元素的排列组合(笛卡尔积)算法
- 输出数组的所有元素的排列组合(递归)
- 【LeetCode】Permutations && Combinations 排列组合
- 关于数组元素的排列组合
- 面试题——找出数组中不相同的所有元素(是数组,不是集合)
- 【unordered_map】在数组中找出包括某集合所有元素的最短子数组
- iOS 从allCount个元素中取出myCount个元素的所有排列组合
- 排列组合-打印出一个数组的元素的所有排列方式-算法
- 打印数组中所有重复的元素
- 求数组的所有排列组合数
- 回溯实现数组元素的排列组合
- Java实现数组元素的排列组合
- 每天一道LeetCode-----给定序列中2/3/4个元素的和为target的所有集合,或3个元素的和最接近target的集合
- 从含有M个元素的集合中任选n个的排列组合
- Android Http get post请求
- bishi:getXXXXByXXX vs querySelectorXXX 差别:
- Android常用布局样式及LayoutInflater介绍
- 浅记c语言二级考试的那些坑
- 火狐浏览器不断弹窗报错的问题
- [leetcode 46] Permutations------数组中元素的所有排列组合集合
- 用Python玩数据-笔记一
- MySQL之数据库模型设计-1 第一范式、第二范式、第三范式理解
- C++ Exceptional 重载运算符new和delete时要注意的地方
- 威佐夫博弈
- 拖延
- 自定义控件--标题栏
- PHP实现的一个简单的爬虫
- Socket的原理简析与使用