持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
大家好,我是速冻鱼🐟,一条水系前端💦,喜欢花里胡哨💐,持续沙雕🌲,是隔壁寒草🌿的好兄弟,刚开始写文章。 如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~
题目🦀
77. 组合
难度中等
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:
输入:n = 1, k = 1
输出:[[1]]
提示:
1 <= n <= 201 <= k <= n
解题思路🌵
- 有出路、有死路。
- 考虑使用回溯算法。
解题步骤🌟
- 经典回溯套路
//初始化result path
const result = []
const path = []
// [1,2,3,4]
//循环
push
backtrac()
pop
//return
- 先初始化result path数组
- 开始遍历然后递归
- 当path.length===k时剪枝
源码🔥
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
const result = []
const path = []
// [1,2,3,4]
function backtrack(start,n,path){
if(path.length===k){
result.push([...path])
return
}
for(let i=start;i<=n;i++){
path.push(i)
backtrack(i+1,n,[...path])
path.pop(i)
}
return
}
backtrack(1,n,path)
return result
};
时间复杂度:O(N^2)
空间复杂度:O(N)
结束语🌞
那么鱼鱼的LeetCode算法篇的「leetCode」77-组合⚡️就结束了,虽然前端对算法要求没有后端高,但是算法是编程基础,程序=数据结构➕算法,所以算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步。
github🤖:sudongyu
个人博客👨💻:速冻鱼blog
vx👦:sudongyuer
写在最后
伙伴们,如果喜欢我的口水话给🐟🐟点一个赞👍或者关注➕都是对我最大的支持。