[leetcode]Combinations

组合DFS。对其中需要无重复,非降序的要求,只需做个小小的“剪枝”判断就行了。

import java.util.ArrayList;
import java.util.Collections;
 
public class Solution {
    public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
        int[] combination = new int[k];
        dfs(combination, 0, k, n, ans);       
        return ans;
    }
     
    public void dfs(int[] combination, int d, int k, int n, ArrayList<ArrayList<Integer>> arr) {
        if (d == k) {
            ArrayList<Integer> a = new ArrayList<Integer>();
            for (int i = 0; i < k; i++) {
                    a.add(combination[i]);
            }
            Collections.sort(a);
            arr.add(a);
            return;
        }
        else {
        	for (int i = 0; i < n; i++) {
        		if (d == 0 || i+1 > combination[d-1]) {
	        		combination[d] = i+1;
	        		dfs(combination, d+1, k, n, arr);
        		}
        	}   
        }
    }
}

  

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