46. 全排列

题目描述

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

  示例:

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

题解:

public class L46 {
    public static List<List<Integer>> permute(int[] nums) {
        List<Integer> list = new ArrayList<>();
        for(int index =0;index<nums.length;index++){
            list.add(nums[index]);
        }
        List<List<Integer>> resList = new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        backList(list,resList,res,nums.length);
        return resList;
    }
    public static void backList(List<Integer> list, List<List<Integer>> resList, List<Integer> res, Integer in){
        if(res.size() == in){
            resList.add(new ArrayList<>(res));
            return;
        }
        for(Integer li : list){
            res.add(li);
            //相当于状态重置的作用。或者使用一个列表用来表示哪些数据已经使用
            List temp = new ArrayList<>(list);
            temp.remove(li);
            backList(temp,resList,res,in);
            temp = null;
            res.remove(li);
        }
    }

    public static void main(String[] args) {
        int nums[]={1,3,5};
        List<List<Integer>> list = permute(nums);
    }
}
原文地址:https://www.cnblogs.com/mayang2465/p/11897069.html