当前位置: 首页 > 后端技术 > Java

LeetCode-077-Combination

时间:2023-04-01 20:32:00 Java

Combination题目描述:给定两个整数n和k,返回[1,n]范围内k个数的所有可能组合。您可以按任何顺序返回答案。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:dfs(深度优先遍历)声明两个全局变量分别为结果集(result)和当前路径(path),加入深度优先遍历的方式。该方法的具体逻辑如下:当k=0时,表示当前路径中已经有k个数字,表示当前路径满足条件,加入到结果集中;然后从1开始遍历数字,递归调用dfs方法,调用后从路径中移除当前路径的最后一个数字。最后返回的结果集是所有满足条件的组合。importjava.util.ArrayList;importjava.util.List;publicclassLeetCode_077{/***结果集*/privatestaticList>result=newArrayList<>();/***当前路径*/privatestaticListpath=newArrayList<>();/***dfs**@paramn一共有n个数*@paramkk个数的组合*@return*/publicstaticList>combine(intn,intk){//递归方法入口dfs(1,n,k);//返回结果集返回结果;}/***深度优先搜索**@paramu路径起点*@paramn一共有n个数*@paramk剩下多少个值达到原k个数*/privatestaticvoiddfs(intu,intn,intk){if(k==0){/***当k等于0时,表示已经有k个数,满足条件放入结果集中*/结果.添加(新ArrayList<>(路径));返回;}for(inti=u;i<=n-k+1;i++){/***将当前数字添加到路径中*/路径.add(i);dfs(i+1,n,k-1);path.remove(path.size()-1);}}publicstaticvoidmain(String[]args){for(Listintegers:combine(4,2)){for(Integerinteger:integers){System.out.print(integer+"");}System.out.println();}}}【每日留言】不要害怕和担心,做你想做的,这个世界就是这样,当你不敢去实现梦想的时候,梦想就会离你越来越远,当你勇敢去追求梦想时,全世界都会来帮助你