【Leetcode】Permutations (Backtracking)

来源:互联网 发布:免费听课的软件 编辑:程序博客网 时间:2024/05/29 16:39

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].

排列和组合的最大区别就在于排列是无序的而组合是有序的,所以对于排列来讲,必须要记录每个元素是否被使用来消除这种无序性。

代码如下 参考Ganker_Code

public static ArrayList<ArrayList<Integer>> permute(int[] num) {ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> temp = new ArrayList<Integer>();if (num == null || num.length == 0)return result;boolean[] used = new boolean[num.length];helper(num, used, temp, result);return result;}public static void helper(int[] num, boolean[] used,ArrayList<Integer> temp, ArrayList<ArrayList<Integer>> result) {if (temp.size() == num.length) {result.add(new ArrayList<Integer>(temp));return;}for (int i = 0; i < num.length; i++) {if (!used[i]) {temp.add(num[i]);used[i] = true;helper(num, used, temp, result);temp.remove(temp.size() - 1);used[i] = false;}}}



0 0
原创粉丝点击