首页 > 学院 > 开发设计 > 正文

LintCode 16 带重复元素的排列

2019-11-08 02:45:45
字体:
来源:转载
供稿:网友

题目:permuteUnique


要求:

给出一个具有重复数字的列表,找出列表所有不同的排列。

样例:

给出列表 [1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]

算法要求:

使用递归和非递归分别完成该题。

解题思路:

我是直接在全排列基础上改的。

算法如下:

vector<vector<int> > mainVec; int size; void permute(vector<int> &nums, int m) { int temp; if (m == nums.size()) { for (int i = 0; i < size; i++) { if (mainVec[i] == nums) { return; } } size++; mainVec.push_back(nums); } else { for (int i = m; i < nums.size(); i++) { temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; permute(nums, m+1); temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; } } } vector<vector<int> > permuteUnique(vector<int> nums) { mainVec.clear(); size = 0; permute(nums, 0); return mainVec; }
上一篇:表格标签

下一篇:通读cheerio API

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表