[leetcode]Subsets

子集DFS。注意:1. 层数是k还是k+1;2.Java中ArrayList的排序是Collections.sort(a)

import java.util.ArrayList;
import java.util.Collections;

public class Solution {
    public ArrayList<ArrayList<Integer>> subsets(int[] S) {
        // Start typing your Java solution below
        // DO NOT write main() function
        boolean[] status = new boolean[S.length];
    	ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
    	dfs(S, status, 0, S.length, ans);   	
    	return ans;
    }
    
    public void dfs(int[] S, boolean[] status, int k, int n, ArrayList<ArrayList<Integer>> arr) {
    	if (k == n) {
    		ArrayList<Integer> a = new ArrayList<Integer>();
    		for (int i = 0; i < n; i++) {
    			if (status[i]) {
    				a.add(S[i]);
    			}
    		}
    		Collections.sort(a);
    		arr.add(a);
    		return;
    	}
    	else {
    		status[k] = true;
    		dfs(S, status, k+1, n, arr);
    		status[k] = false;
    		dfs(S, status, k+1, n, arr);
    	}
    }
}

  

posted @ 2013-08-05 21:20  阿牧遥  阅读(303)  评论(0)    收藏  举报