Given a collection of numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
,
and [3,2,1]
.
题目:给定一组数。返回其全排列。
思路:记录每个数是否被使用过,将未使用过的数增加到current中,current长度已满。则增加到result中。
public List<List<Integer>> permute(int[] num) { if (num == null) return null; List<List<Integer>> result = new ArrayList<List<Integer>>(); if (num.length == 0) return result; permute(num, new boolean[num.length], new ArrayList<Integer>(), result); return result; } public void permute(int[] num, boolean[] isused, ArrayList<Integer> current, List<List<Integer>> result) { if (current.size() == num.length) { result.add(new ArrayList<Integer>(current)); return; } for (int i = 0; i < num.length; i++) { if (!isused[i]) { isused[i] = true; current.add(num[i]); permute(num, isused, current, result); current.remove(current.size() - 1); isused[i] = false; } } }