给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
emmmmmm 距离beat 100% 1ms之差,好吧,也是能接受的
思路:
回溯,与自身后面包括自己交换,交换后递归到下一个节点继续交换,当然最后不要忘了回溯,可能有时候不知道什么时候要回溯回来 = =,回溯的题目做多了,就会知道什么时候该回溯了
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
dfs(nums, 0, ans);
return ans;
}
public void dfs(int[] nums, int m, List<List<Integer>> ans) {
if(m>=nums.length)
{
List<Integer> list = new ArrayList<>();
for(int i:nums)
list.add(i);
ans.add(list);
return;
}
for(int i=m;i<nums.length;i++) {
swap(nums,m,i);
dfs(nums, m+1, ans);
swap(nums,m,i);
}
}
public void swap(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}