湛江城乡建设网站,中国建设银行的网站首页,百度一下你就知道官网首页,wordpress使用腾讯云cos回溯算法的一般可以解决的问题#xff1a;
组合问题#xff1a;如 LeetCode-77-组合、LeetCode-39-组合总和、LeetCode-40-组合总和Ⅱ、LeetCode-216-组合总和Ⅱ、LeetCode-17-电话号码的字母组合分割问题#xff1a;如 LeetCode-131-分割回文串、LeetCode-93-复原IP地址子…回溯算法的一般可以解决的问题
组合问题如 LeetCode-77-组合、LeetCode-39-组合总和、LeetCode-40-组合总和Ⅱ、LeetCode-216-组合总和Ⅱ、LeetCode-17-电话号码的字母组合分割问题如 LeetCode-131-分割回文串、LeetCode-93-复原IP地址子集问题如 LeetCode-78-子集、LeetCode-90-子集Ⅱ、LeetCode-491-递增子序列排列问题如 LeetCode-46-全排列、LeetCode-46-全排列Ⅱ棋盘问题如 LeetCode-51-N皇后、LeetCode-37-解数读
递归三部曲 ① 确定递归函数的参数和返回值一般是 void名字一般是 backtracking ② 确定终止条件 ③ 确定单层递归逻辑。 LeetCode-77-组合 解题思路 确定递归函数的参数需要 n, k, 还有一个变化的下标startIndex确定终止条件这个简单当一维数组的长度等于 k 说明已经够了停止即可确定单层递归逻辑这个需要考虑从哪里开始判断题目中是从1开始所以下标也从1 开始在for循环里开始回溯但是每次回溯后为了方便将下一个元素加进去也就是回到树形结构的父节点我们需要弹出一个元素这个容易忽略。 代码实现 class Solution {/*** param n 1~n* param k 要求的个数* return 返回范围 [1, n] 中所有可能的 k 个数的组合*/public ListListInteger combine(int n, int k) {backtracking(n,k,1);return res;}ListListInteger res new ArrayList();//二维数组要返回的结果ListInteger path new ArrayList();// 树形结构走的路径即能放进去的数public void backtracking(int n, int k, int startIndex){if (path.size() k){// 终止条件res.add(new ArrayList(path));// 满足条件将一维数组加到结果集中return;// 切记需要返回}for (int i startIndex; i n; i) {// 没有剪枝的情况path.add(i);backtracking(n,k,i1);// 回溯path.remove(path.size()-1);// 还需要弹出一个元素即表示回到上一步}}
}