您的位置:首页 > 其它

Leetcode——047

2016-04-24 10:03 211 查看


/*

47. Permutations II My Submissions QuestionEditorial Solution

Total Accepted: 69185 Total Submissions: 247339 Difficulty: Medium

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,

[1,1,2] have the following unique permutations:

[1,1,2], [1,2,1], and [2,1,1].

Subscribe to see which companies asked this question

Show Tags

Show Similar Problems

*/

/*

解题思路:

求取数组的所有的字典序组合,首先要对整个数组进行从小到大排序。可以使用STL中的函数next_permutation 来直接获得下一个组合。(如果不想用,可以自己去实现next_permutation这个函数),这个函数也是比较容易实现的,具体实现看以下代码补充;

*/

class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
//如果没有元素直接返回
if(nums.size()==0)return {};
//对数组进行排序
sort(nums.begin(),nums.end());
//结果集合
vector<vector<int>> res;
do{
//将每一个结果存入结果集合中
res.push_back(nums);
}while(next_permutation(nums.begin(),nums.end()));
return res;
}
};


/*

代码补充:

*/

bool my_next_permutation(vector<int>&num){
int i, j;
//从后往前找第一个下降点
for (i = num.size() - 1; i > 0; i--){

if (num[i] > num[i - 1])break;
}
//如果没有找到下降点,则说明已经到了最大值
if (i == 0)return false;
//在从后往前找第一个大于那个小点的数字,进行交换
for (j = num.size() - 1; j > i - 1; j--){

if (num[j] > num[i - 1]){
swap(num[j], num[i - 1]);
//交换后,将后半部分进行升序排列
reverse(num.begin() + i, num.end());
break;
}

}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: