leetCode练习(77)

来源:互联网 发布:淘宝保证金必须要交吗 编辑:程序博客网 时间:2024/05/24 05:08

题目:Combinations          

难度:medium

问题描述:

Given two integers n and k, return all possible combinations ofk numbers out of 1 ...n.

For example,
If n = 4 and k = 2, a solution is:

[  [2,4],  [3,4],  [2,3],  [1,2],  [1,3],  [1,4],]

解题思路:使用DFS,回溯求解。注意添加判断:剩余字符数小于剩余步数时,不在搜索。可以极大减少迭代次数。

具体代码如下:

public List<List<Integer>> combine(int n, int k) {   List<List<Integer>> reslist=new ArrayList<List<Integer>>();       diedai(new ArrayList<Integer>(),0,k,1,n,reslist);       return reslist;    }//可用字符从start到end//已经进行step步,一共需要k步public void diedai(ArrayList<Integer> list,int step,int k,int start,int end,List<List<Integer>> reslist){if((k-step)>(end-start+1)){return;}if(step==k){List<Integer> temp = new ArrayList<>(list);        reslist.add(temp);        return;}for(int i=start;i<=end;i++){list.add(i);diedai(list,step+1,k,i+1,end,reslist);list.remove(list.size()-1);}}


0 0