力扣:77. 组合

回溯解法思路:

1.先定义一个接收全部组合的集合,在定义一个单个组合的集合,再写一个回溯方法来进行回溯,

回溯终止条件,把单个集合中的组合加入到大集合去,同时选择下一个值进行递归组合,递归到达到组合的个数时,回溯,删除处理的点进行下一个点的组合。

java 复制代码
class Solution {
    //返回全部数字组合的接收集合
    List<List<Integer>> li1=new ArrayList<>();
    //数字组合的集合
    List<Integer> li2=new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
      //回溯函数
       huisu(n,k,1);
       return li1;
    }
    //定义的回溯函数
    public void huisu(int n,int k,int startIndex){
        //组合的终止条件
        if(li2.size()==k){
            li1.add(new ArrayList<>(li2));
            return ;
        }
  //进行组合的for循环
        for(int i=startIndex;i<=n;i++){
          li2.add(i);
          //递归k-1次来生成组合元素。
          huisu(n,k,i+1);
          li2.removeLast();
        }
    }
}
相关推荐
Java中文社群2 分钟前
重磅!Ollama发布UI界面,告别命令窗口!
java·人工智能·后端
YuTaoShao10 分钟前
【LeetCode 热题 100】152. 乘积最大子数组——(解法一)递推
java·算法·leetcode·职场和发展
熙客11 分钟前
Java:HashMap的使用
java·开发语言
程序员清风21 分钟前
程序员代码有Bug别怕,人生亦是如此!
java·后端·面试
就是帅我不改29 分钟前
告别996!高可用低耦合架构揭秘:SpringBoot + RabbitMQ 让订单系统不再崩
java·后端·面试
hhzz42 分钟前
Maven项目中settings.xml终极优化指南
java·jdk·maven
weixin_3077791343 分钟前
C++进程监视器与自动启动程序
开发语言·c++·算法
hqxstudying1 小时前
MyBatis 和 MyBatis-Plus对比
java·数据库·mysql·mybatis
源码哥_博纳软云1 小时前
JAVA国际版多商户运营版商城系统源码多商户社交电商系统源码支持Android+IOS+H5
android·java·ios·微信·微信小程序·小程序·uni-app
猿java1 小时前
为什么复杂的架构一定要做分层设计?
java·面试·架构