题目:
给定一个数字列表,返回其所有可能的排列。
注意事项
你可以假设没有重复数字。
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int> > permute(vector<int> nums) {
// write your code here
vector<vector<int> > result;
if (nums.size() == 0 || nums.size() == 1) {
result.push_back(nums);
return result;
}
sort(nums.begin(), nums.end());
while (true){
int p, i;
result.push_back(nums);
for (i = nums.size()-1; i >= 0; i--) {
if (i <= 0)
return result;
if (nums[i-1] < nums[i]) {
p = i-1;
break;
}
}
for (int j = nums.size()-1; j > p; j--) {
if (nums[j] > nums[p]) {
swap(nums[p], nums[j]);
break;
}
}
reverse(nums.begin() + p+1, nums.end());
}
}
};