46、组合

题目描述:
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

这次差点有没整出来
很明显的递归,一开始一点信心都没,但是还是完整写出来了
不错

class Solution {
      List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
   
        int dire[] = new int[n];
        for (int i = 0; i < dire.length; i++) {
			dire[i] = i + 1;
		}
        List<Integer> tem = new ArrayList<>();
        getsub(result, tem, dire, k, 0);
        
        
        return result;
        
	
	}
	public void getsub(List<List<Integer>> result, List<Integer> tem,int []n,int k,int dangqian){
        
		if(tem.size() == k){
            System.out.println(tem.toString());
			List<Integer> news = new ArrayList<>(tem);
			
			result.add(news);
			return ;
		}
		for (int i = dangqian; i < n.length; i++) {
			tem.add(n[i]);
			getsub(result, tem, n, k, i + 1);
			tem.remove(tem.size() - 1);
		}
		
		
	}
}

排名靠前的代码
思路一样,但是就是没人家的快

class Solution {
    
    
    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> result = new ArrayList<>();
        if(n < k){
            return result;
        }
        getResult(n,k,1,result,new ArrayList<Integer>());
        return result;
    }
    
    public void getResult(int n,int k,int index, List<List<Integer>> result, List<Integer> temp){
        if(k == 0){
            result.add(new ArrayList(temp));
            return;
        }  
        for(int i = index; i< n - k+2;i++){
            temp.add(i);
            getResult(n,k-1,i+1,result,temp);
            temp.remove(temp.size()-1);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/88214183
46