/*Permutation、Permutation II可用同样的方法进行求解,即
用next_permutation循环求解至最后的序列。(注:STL中有next_permutation
函数,这里进行重新进行了实现)。当这个代码用于Permutation II提交时,只需要
将函数名permute改为permuteUnique*/
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> > res;
if(nums.empty()) return res;
else if(nums.size() == 1){
res.push_back(nums);
return res;
}
else{
sort(nums.begin(), nums.end());
res.push_back(nums);
while(next_permutation(nums)) res.push_back(nums);
}
return res;
}
bool next_permutation(vector<int> &nums){
/*函数功能:寻找当前序列的下一排列。下一排列比当前排列
次序刚好大一点。*/
if(nums.size() < 2) return false;
int i(nums.size()-1);
while(i > 0 && nums[i] <= nums[i-1]) --i;
if(i == 0) return false;//不存在next_permutation
int j = nums.size()-1;
while(nums[j] <= nums[i-1]) --j;
swap(nums[j], nums[i-1]);
j = nums.size()-1;
while(j > i){
swap(nums[j], nums[i]);
--j;
++i;
}
return true;
}
};
LeetCode之Permutation、Permutation II
最新推荐文章于 2020-07-19 22:32:46 发布