给定一个 没有重复 数字的序列,返回其所有可能的全排列。
输入: [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; } }