题目:
解答:
题46的解法在这里依然适用,不需要做修改
代码:
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len = nums.size();
vector<vector<int>> result;
if(len == 0) return result;
if(len == 1){
result.push_back(nums);
return result;
}
sort(nums.begin(), nums.end());
result.push_back(nums);
// 1 3 4 2
// 1 4 3 2
// 3 4 2 1
while(true){
/*
for(int i = 0;i < len; ++i)
cout << nums[i] << " ";
cout << endl;
*/
int i = len - 1;
for(i = len - 1;i > 0; --i){
if(nums[i] > nums[i-1]){
for(int j = len - 1;j >= i; --j){
if(nums[j] > nums[i-1]){
swap(nums[j], nums[i-1]);
for(int k = i;k <= (i + len - 1) / 2; ++k)
swap(nums[k], nums[i+len-1-k]);
result.push_back(nums);
break;
}
}
break;
}
}
if(i == 0)
break;
}
return result;
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)