首页 > 其他分享 >回溯法学习笔记

回溯法学习笔记

时间:2023-02-04 12:44:21浏览次数:46  
标签:res int List ArrayList list 笔记 学习 回溯

回溯法学习笔记

目录

1,什么是回溯法

回溯法其实是一种使用递归的暴力搜索法

2,什么时候使用回溯法

在常规的for循环暴力搜索法无法完成任务的时候,使用回溯法,如:

  1. 组合问题
  2. 切割字符串
  3. 子集问题
  4. 排列问题
  5. 棋盘问题(n皇后问题等)

3,回溯法的套路

使用以下模板即可:

void backTracking(参数(一般都有很多参数)){
    if (终止条件){
        收集结果;
        return;
    }
    for (集合元素){
        处理节点;
        递归函数;
        回溯;
    }
}

4,例题

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]
//按照上述模板即可写出代码
class Solution {
    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> res = new ArrayList();
        List<Integer> list = new ArrayList();
        List<Integer> temp = new ArrayList(list);
        backTracking(res,list,1,n,k);
        return res;
    }
    public void backTracking(List<List<Integer>> res, List<Integer> list, int start, int n, int k){
        if (k == 0){
            List<Integer> temp = new ArrayList(list);
            res.add(temp);
        }
        for (int i = start; i <= n; i++){
            list.add(i);
            backTracking(res,list,i+1,n,k-1);
            list.remove(list.size()-1);
        }
    }
}

标签:res,int,List,ArrayList,list,笔记,学习,回溯
From: https://www.cnblogs.com/wyh-s/p/17091277.html

相关文章

  • 四.如何学习Java
    四.如何学习Java1.学习建议(1)多写代码、多总结、多交流(2)第一周以后,尽量不要抄代码(3)写笔记,找一个好的笔记工具(比如typora)(4)分享、提问、思考2.博客的重要性我......
  • 【随笔记】T507 ADC SGM58031 16BIT 4Channel 调试记录
    文章介绍本文主要描述在T507Android10Linux4.9平台下,调试SGM58031芯片的记录,实现单芯片实时采集外部四通道的电压数值。芯片介绍SGM58031是一款低功耗、16位......
  • JavaScript高级第01天笔记-cnblog
    JavaScript高级第01天笔记1.面向过程与面向对象1.1面向过程面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用......
  • JavaScript高级第02天笔记-cnblog
    JavaScript高级第02天笔记1.构造函数和原型1.1对象的三种创建方式--复习字面量方式varobj={};new关键字varobj=newObject();构造函数方式function......
  • JavaScript高级第03天笔记-cnblog
    JavaScript高级第03天笔记1.函数的定义和调用1.1函数的定义方式方式1函数声明方式function关键字(命名函数)functionfn(){}方式2函数表达式(匿名函数)var......
  • 011-CH32V307(WCH单片机)学习开发 - MounRiver Studi生成bin文件或者hex文件
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnCH32V307VCT6"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> ......
  • VUE学习笔记DAY01-cnblog
    webpack的使用(配合ppt)1.webpack前端工程化的具体解决方案作用代码压缩混淆处理浏览器端的JavaScript兼容性性能优化1.1基于webpack实现隔行变色npmij......
  • 【Matlab学习3.1】顺序结构程序
    程序和程序设计什么叫程序?程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。程序的三种基本结构顺序结构:按照语句的先后顺序,依次执行不......
  • B站计算机导论课学习心得
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/2023learning这个作业要求在哪里https://edu.cnblogs.com/campus/fzzcxy/2023learning/homework/1......
  • Jenkinsfile小笔记
    JenkinsfileJenkins流水线支持两种语法,声明式和脚本式流水线.两种语法都支持持续交付流水线.两种都可以用来在webUI或jenkinsfile中定义流水线,不过通常认为创建......