� 回溯算法是一种通过循环加递归的方式得出树形结构复合条件的解的一种算法模式, 适合用于解决排列组合类的问题, 它是一种暴力求解的算法模式.
算法结构如下:
-
终止条件
-
循环遍历
-
递归嵌套
-
结果采集
-
结果回溯
因此使用回溯算法解题时, 应该遵循以下步骤:
1. 确定题目属于排列组合类问题, 并判断题目是否需要去重, 如果需要去重, 非子序列的问题都可以先对原数组进行排序.
2. 用简单的输入用例绘制题目的树形结构
-
声明解题函数和回溯函数, 确定回溯函数需要的参数
-
确定终止条件和结果采集的条件
-
写出循环逻辑, 单层循环内应当注意, 如果是组合问题, 要通过
startIndex
等手段确保不会重复遍历上一次递归中遍历过的元素. -
更新临时结果并进入下一层递归
-
递归后回溯临时结果
-
尝试剪枝优化减少运算次数
贪心算法是一种通过不断组合局部最优解最终得到全局最优解的算法模式. 总的来说贪心算法并没有固定的套路可言, 因此使用贪心算法需要记住两点:
1. 针对具体问题, 能不能找到局部最优解?
2. 局部最优能不能推导出全局最优?