Leecode 46. 全排列

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

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

leetcode 第46题 解题思路

这也是一个递归问题。对于数组中的每个元素,它的全排列就等于它本身加上除它以外所有的全排。所以只要这样依次计算全排列就行.

class Solution {

    List<List<Integer>> res = new ArrayList<>();
    boolean[] used = null;

    public List<List<Integer>> permuteUnique(int[] nums) {
        res.clear();
        if(nums.length==0) return res;
        used = new boolean[nums.length];
        permuteAux(nums,0, new ArrayList<>());
        return res;
    }

    private void permuteAux(int[] nums,int index,List<Integer> st) {
        if(index == nums.length){

            List<Integer> t = new ArrayList<>(st);
            res.add(t);
            return;
        }

        for(int i=0;i<nums.length;i++){
            if(used[i]) continue;
            st.add(nums[i]);
            used[i] = true;
            permuteAux(nums,index+1,st);
            used[i] = false;
            st.remove(st.size()-1);

        }

        return;
    }
}
原文地址:https://www.cnblogs.com/kpwong/p/14649663.html