给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

    示例 1:

    输入:nums = [1,2,3]
    输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
    示例 2:

    输入:nums = [0,1]
    输出:[[0,1],[1,0]]
    示例 3:

    输入:nums = [1]
    输出:[[1]]

    提示:

    1 <= nums.length <= 6
    -10 <= nums[i] <= 10
    nums 中的所有整数 互不相同


    1. class Solution {
    2. /**
    3. 对于全排列问题,我们只需要调回相应的值就行,递归完再回溯回来
    4. */
    5. int n;
    6. List<List<Integer>> res;
    7. int[] nums;
    8. public List<List<Integer>> permute(int[] nums) {
    9. this.nums = nums;
    10. n = nums.length;
    11. res = new ArrayList<List<Integer>>();
    12. dfs(0);
    13. return res;
    14. }
    15. public void dfs(int u) {
    16. //当已经处理完一个排列时加入答案
    17. if (u == n-1) {
    18. List<Integer> path = new ArrayList<>();
    19. for (int i = 0; i < n; ++i) path.add(nums[i]);
    20. res.add(path);
    21. }
    22. for (int i = u; i < n; ++i) {
    23. swap(i,u);
    24. dfs(u+1);
    25. swap(i,u);
    26. }
    27. }
    28. public void swap(int x, int y) {
    29. if (x < n && y < n) {
    30. int tem = nums[x];
    31. nums[x] = nums[y];
    32. nums[y] = tem;
    33. }
    34. }
    35. }