春招修仙系列 —— leetcode 46全排列

题目:

给定一个没有重复数字的序列,返回其所有可能的全排列

示例 1:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

代码1:

class Solution {
  public List<List<Integer>> permute(int[] nums) {
    List<List<Integer>> list = new ArrayList<>();
    helper(list, nums, 0);
    return list;
  }

  private void helper(List<List<Integer>> list, int[] nums, int n) {
    if (n == nums.length - 1) {
      list.add(asList(nums));
    } else {
      for (int i = n; i < nums.length; i++) {
        swap(nums, n, i);
        helper(list, nums, n + 1);
        swap(nums, n, i);
      }
    }
  }

  private List<Integer> asList(int[] nums) {
    List<Integer> list = new ArrayList<>(nums.length);
    for (int i : nums) {
      list.add(i);
    }
    return list;
  }

  private void swap(int[] arr, int i, int j) {
    int c = arr[i];
    arr[i] = arr[j];
    arr[j] = c;
  }
}

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Kirito19970409/article/details/86558813