给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
package com.loo;
import java.util.ArrayList;
import java.util.List;
public class BacktrackingAlgorithm {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr = new int[] { 1 , 2 , 3};
List<List<Integer>> list = getBacktracking(arr);
System.out.println(list);
}
public static List<List<Integer>> getBacktracking(int[] arr) {
List<List<Integer>> list = new ArrayList();
if (arr == null || arr.length == 0) {
return list;
}
boolean[] used = new boolean[arr.length];
List<Integer> path = new ArrayList();
dfs(arr , arr.length , 0 , path , list , used);
return list;
}
public static void dfs(int[] arr , int length , int depth , List<Integer> path , List<List<Integer>> res , boolean[] used) {
if (depth == length) {
res.add(new ArrayList<>(path));
return;
}
for (int i=0;i<length;i++) {
if (!used[i]) {
used[i] = true;
path.add(arr[i]);
dfs(arr , length , depth+1 , path , res , used);
used[i] = false;
path.remove(path.size()-1);
}
}
}
}