leetcode -- Permutations

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

求每个位置所有可能出现的情况:

固定第一个字符,然后求后面所有字符的排列。这个时候仍把后面的所有字符分成两部分:

后面字符的第一个字符,以及这个字符之后的所有字符

 1 public class Solution {
 2     public ArrayList<ArrayList<Integer>> permute(int[] num) {
 3         // Start typing your Java solution below
 4         // DO NOT write main() function
 5         int len = num.length;
 6         ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
 7         permutation(num, 0, len, result);
 8         return result;
 9     }
10     
11     public void permutation(int[] num, int depth, int len, ArrayList<ArrayList<Integer>> result){
12         if(depth == len){
13             ArrayList<Integer> per = new ArrayList<Integer>();
14             for(int i =0 ; i < len; i++)
15                 per.add(num[i]);
16             
17             result.add(per);
18         }
19         
20         for(int i = depth; i < len; i++) {
21             int tmp = num[i];
22             num[i] = num[depth];
23             num[depth] = tmp;
24             
25             permutation(num, depth + 1, len, result);
26             
27             tmp = num[i];
28             num[i] = num[depth];
29             num[depth] = tmp;
30         }
31     }
32 }

 

posted @ 2013-08-07 09:58  feiling  阅读(291)  评论(0编辑  收藏  举报