# 0046. Permutations
###### tags: `Leetcode` `FaceBook` `Backtracking`
Link: https://leetcode.com/problems/permutations/
## 思路
这种需要固定长度的permutation都是用交换做的 类似的题目还有 [267. Palindrome Permutation II](https://hackmd.io/skACPwENSTK5eoMhHuVJfA)

## Code
```java=
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> output = new ArrayList<>();
int n = nums.length;
List<Integer> numsList = new ArrayList<>();
for(int i = 0;i < nums.length;i++){
numsList.add(nums[i]);
}
backtrack(n, numsList, output,0);
return output;
}
public void backtrack(int len, List<Integer> nums, List<List<Integer>> output, int first){
if(first == len){
output.add(new ArrayList<Integer>(nums));
}
for(int i = first;i < len;i++){
Collections.swap(nums, first, i);
backtrack(len, nums, output, first+1);
Collections.swap(nums, first, i);
}
}
}
```