欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 《代码随想录》Day22打卡!

《代码随想录》Day22打卡!

2025/2/23 22:31:58 来源:https://blog.csdn.net/qq_59615070/article/details/144869503  浏览:    关键词:《代码随想录》Day22打卡!

回溯算法

《代码随想录》回溯算法:组合

本题完整题目如下:

image.png

本题的完整思路如下: 1.本题使用回溯算法,其实回溯和递归是一样的道理,也是分为三步曲进行: 2.第一步:确定递归函数的返回值和参数:回溯算法的返回值一般都是void,参数一开始不确定可以等写递归逻辑时进行添加。 3.第二步:确定递归函数的终止条件:当当前集合中的元素大于目标个数时,则将当前集合添加到结果数组中,返回。 4.第三步:确定单次递归函数中的逻辑:需要使用一个参数来控制每次从哪个位置开始,遍历元素,所以在递归函数的参数中添加一个参数来表示每次开始遍历的位置。将当前元素添加到当前集合中,并进行遍递归,并接着将该元素从当前集合中删除,以方便下一个元素进来。 5.本题不是很理解,没有入门,还得进一步理解!!!

本题的完整代码如下:

//第77题. 组合
class Solution1 {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backstrack(n, k, 1);return res;
​}public void backstrack(int n, int k, int startindex){int d = k - path.size();//使用这个来统计还需要填充的元素数,方便接下来的剪枝操作if(n - startindex + 1 < d ){return;}if(path.size() == k){res.add(new ArrayList<>(path));return;}for(int i = startindex; i <= n; i++){path.add(i);backstrack(n, k, i + 1);path.remove(path.size() - 1);}}
}

《代码随想录》回溯算法:组合优化

所谓的组合优化就是进行剪枝,当当前的结果不满足条件时,这个分支就不再继续递归了,及时止损,有利于节省时间。

《代码随想录》回溯算法:组合总和III

本题与第一题很类似,但是还需要进一步理解,完整代码如下:

//216.组合总和III
class Solution2{List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();int sum = 0;public List<List<Integer>> combinationSum3(int k, int n) {backstrack(k, n, 1);return res;}public void backstrack(int k, int n, int startindex){if(path.size() == k){if(sum == n){res.add(new ArrayList<>(path));}return;}
​for(int i = startindex; i <= 9; i++){if(sum + i > n){break;}path.add(i);sum += i;backstrack(k, n, i + 1);path.remove(path.size() - 1);sum -= i;}}
​
}

《代码随想录》回溯算法:电话号码的字母组合

本题不会,看了答案也没有看懂,所以还需要后续学习!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词