一 算法思想
思路:全排列可以理解是一个树的递归的过程,每一个递归过程中的叶子结点就是一种可能的排列方式。利用递归可以很好的帮我们实现下面这颗树的完成深度优先遍历,得到我们想要的全排列。
二 编码实现
public static List<List<Integer>> fullArray(List<Integer> number) {
List<List<Integer>> result = Lists.newArrayList();
if (CollectionUtils.isEmpty(number)) {
return result;
}
List<Integer> path = Lists.newArrayList();
Integer depth = 0;
boolean[] used = new boolean[number.size()];
dfs(number, path, depth, used, result);
return result;
}
private static void dfs(List<Integer> number, List<Integer> path, Integer depth, boolean[] used, List<List<Integer>> result) {
if (depth == number.size()) {
result.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < number.size(); i++) {
if (used[i]) {
continue;
} else {
path.add(number.get(i));
used[i] = true;
dfs(number, path, depth + 1, used, result);
path.remove(number.get(i));
used[i] = false;
}
}
}