题目
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
- 注意没有重复的数。
- 每次固定一个数作为第一个值,后面递归继续固定一个数作为第一个值。直到数组到尾部,得到一种排列。
代码
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
if ( nums.size() == 0 ) return res;
dfs( nums, 0, res );
return res;
}
void dfs( vector<int>& nums, int index, vector<vector<int>>& res ) {
if ( index == nums.size() - 1 ) {
res.push_back( nums );
return;
}
for ( int i = index; i < nums.size(); ++i ) {
swap( nums[i], nums[index] );
dfs( nums, index + 1, res );
swap( nums[i], nums[index] );
}
return;
}
void swap( int& a, int& b ) {
int temp = a;
a = b;
b = temp;
return;
}
};