hot100 回溯算法

回溯:

  • 特点:

    • 递归是向前,回溯就是需要考虑后退,它是一种搜索的方式;

    • 类似于暴力搜索 + 剪支【提高效率】;

      • 减支,是优化的唯一方式;
    • 集合的大小构成了树的宽度,递归的深度构成了树的深度;

      for循环树的宽度,递归树的深度【多叉树】;

      • 变量【宽度、深度】

      在每一次的迭代中确定子树的宽度【去重问题】

  • 经典题型:

    • 组合问题:

      • 组合是没有顺序的,所以一定会传入一个下标,来限制访问已经访问过的【结果去重】

      • 去重问题:

        • 结果去重【无顺序】:不能访问已经访问过的数据【传入下标【i or i++】,i不能减小】;

        • 数据去重【输入有重复】:重新排序,

          • 当元素可重复的时,传入下标不变【i 】;

          总结:对同一树枝去重,是元素去重,【通过标记法】

          对同一树层去重,是结果去重;【通过下标i】

          ​ 对于唯一解,不需要进行树层的去重【最佳行程】

    • 排列问题;

    • 分割,子集;

      总结:组合 + 分割问题【收集树的叶子节点】

      ​ 子集问题【找到树的所有节点】

    • 棋盘问题【偏向于深度优先搜索,最佳结果唯一】:

      • 最佳行程【解决优先问题】
      • N皇后【对于树宽,树深】
      • 数独【二维递归】

    回溯是暴力解法,模板较为固定【通常会超时】

posted @ 2025-07-28 21:39  烟雨断桥  阅读(11)  评论(0)    收藏  举报