思路:
我用的最直接的方法, 一次一次的找下一个排列(next permutation), 直到数组完全逆序就算找完.
bool nextPermutation(vector<int>& nums) {
int i, j;
for (i = nums.size() - 2; i >= 0; i--)
if (nums[i] < nums[i + 1])
break;
if (i < 0) return false;
for (j = nums.size() - 1; j > i; j--)
if (nums[j] > nums[i])
break;
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
return true;
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
// 要记得排序!!!
sort(nums.begin(), nums.end());
res.push_back(nums);
if (nums.empty() || nums.size() == 1)
return res;
while (nextPermutation(nums))
res.push_back(nums);
return res;
}