数组的全排列

要求:给出数组A={a_0,a_1,a_2,...,a_n}(n是可变的),打印出所有元素的组合

leetcode上面也有这道题https://leetcode.com/problems/permutations/

思路:

使用回溯BS算法,用一个visited数组保存已经访问过的元素,使用一个list保存已经生成一个排列。

开始没有使用list保存前面的记录,显示的时候就会显示后面一部分,不会显示前面部分

--------------------------------------------------我是代码分割线-------------------------------------------------------

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 /**
 5  * 数组的全排列
 6  * 回溯算法的应用
 7  * 需要对前面的状态进行记录,所以用了一个list记录
 8  * @author GXF
 9  *
10  */
11 public class Permutations {
12     private boolean visited[] = new boolean[6];    
13     
14     public void dfs(int nums[], int depth, List<Integer> cur){
15         if(nums == null)
16             return;
17         if(depth == nums.length)
18         {            
19             System.out.println(cur);
20             return;
21         }
22         for(int i = 0; i < nums.length; i++){
23             if(visited[i] == false){
24                 visited[i] = true;
25                 cur.add(nums[i]);
26                 dfs(nums, depth + 1, cur);
27                 cur.remove(cur.size() - 1);
28                 visited[i] = false;
29             }
30         }
31     }
32     
33     public static void main(String args[]){
34         Permutations permutations = new Permutations();
35         List<Integer> cur = new ArrayList<Integer>();
36         int nums[] = {1,2,3,4,5,6};
37         permutations.dfs(nums, 0, cur);
38     }
39 }

 

posted on 2015-07-31 22:16  luckygxf  阅读(1828)  评论(0编辑  收藏  举报

导航