组给出两个整数n和k,返回从1......n中选出的k个数的组合。
样例
例如 n = 4 且 k = 2
返回的解为:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]
解题
同样式DFS
本题只需要增加判断size 是否等于k的情况
public class Solution { /** * @param n: Given the range of numbers * @param k: Given the numbers of combinations * @return: All the combinations of k numbers out of 1..n */ public ArrayList<ArrayList<Integer>> combine(int n, int k) { // write your code here ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if(n<0 || k<0) return result; int start = 1; ArrayList<Integer> list = new ArrayList<Integer>(); DFS(n,k,start,result,list); return result; } public void DFS(int n,int k,int start ,ArrayList<ArrayList<Integer>> result,ArrayList<Integer> list){ if(list.size() == k){ ArrayList<Integer> tmp = new ArrayList<Integer>(list); if(!result.contains(tmp)) // 可不要 result.add(tmp); return; } for(int i = start;i<=n ;i++){ list.add(i); DFS(n,k,i+1,result,list); list.remove(list.size() -1); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步