刷题

简介: 1

theme: channing-cyan

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

给定两个整数 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 <= 20 1 <= k <= n

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations

二、思路分析:

本题这是回溯法的经典题目。直接的解法当然是使用for循环,思路简单但效率相对没有优势,可以使用回溯搜索法,具体步骤如下

定义成全局变量便不必再当作参数传入函数

剪枝,判断当前长度和数组剩余长度能否构成一个k个数的组合

for 循环里 i 从 start 到 n。

比如,n = 5,k = 4,temp.size( ) == 1,此时代表我们还需要(4 - 1 = 3)个数字,

如果 i = 4 的话,以后最多把 4 和 5 加入到 temp 中,而此时 temp.size() 才等于 1 + 2 = 3,

不够 4 个,所以 i 没必要等于 4,i 循环到 3 就足够了。

所以 for 循环的结束条件可以改成, i <= n - ( k - temp.size ( ) ) + 1,因为我们最后取到了 n,所以还要加 1。

public List<List<Integer>> combine(int n, int k) {
    List<List<Integer>> ans = new ArrayList<>();
    getAns(1,n, k, new ArrayList<Integer>(), ans);
    return ans;
}
​
private void getAns(int start, int n, int k, ArrayList<Integer> temp, List<List<Integer>> ans) { 
    if(temp.size() == k){
        ans.add(new ArrayList<Integer>(temp));
        return;
    }
    for (int i = start; i <= n - (k -temp.size()) + 1; i++) {
        temp.add(i);
        getAns(i+1, n, k, temp, ans);
        temp.remove(temp.size() - 1);
    }
}

四、总结:

image.png

回溯法和递归一样,开始学习的时候会觉得有些绕,所以一定要多加练习,逐渐体会回溯的过程,理清代码的组成结构,一定会有所进步!

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

相关文章
|
27天前
|
安全 数据建模 物联网
阿里云SSL证书讲解:证书品牌、优势、应用场景以及免费版和收费版购买流程
阿里云数字证书管理服务集云上SSL证书生命周期管理和数字证书应用为一体的SAAS服务。本文将详细介绍该产品的优势、规格、售卖模式、功能、应用场景以及免费版和收费版购买流程,以供参考。
125 5
|
JSON 负载均衡 前端开发
一文带你详细了解Open API设计规范
一文带你详细了解Open API设计规范
8903 1
|
8月前
|
人工智能 并行计算 监控
在AMD GPU上部署AI大模型:从ROCm环境搭建到Ollama本地推理实战指南
本文详细介绍了在AMD硬件上构建大型语言模型(LLM)推理环境的全流程。以RX 7900XT为例,通过配置ROCm平台、部署Ollama及Open WebUI,实现高效本地化AI推理。尽管面临技术挑战,但凭借高性价比(如700欧元的RX 7900XT性能接近2200欧元的RTX 5090),AMD方案成为经济实用的选择。测试显示,不同规模模型的推理速度从9到74 tokens/秒不等,满足交互需求。随着ROCm不断完善,AMD生态将推动AI硬件多元化发展,为个人与小型组织提供低成本、低依赖的AI实践路径。
3264 1
在AMD GPU上部署AI大模型:从ROCm环境搭建到Ollama本地推理实战指南
|
存储 缓存 网络架构
计算机网络:数据交换方式
计算机网络:数据交换方式
539 3
|
NoSQL Java API
lua+redis:分布式锁解决方案
分布式锁的是确保在多个进程或多个节点之间对共享资源的访问是有序、互斥和原子的,以避免竞态条件和数据不一致性问题。在多进程或多节点环境中,分布式锁广泛应用于协调共享资源的安全访问。
392 1
|
前端开发 JavaScript 容器
谁动了我的选择器?深入理解CSS选择器优先级
该文章详细解释了CSS选择器的工作原理,包括不同种类选择器的权重计算规则,并通过实例说明了如何解决样式冲突问题,确保所需的样式能够正确应用到目标元素上。
|
机器学习/深度学习 算法 PyTorch
全面掌握胶囊网络:从基础理论到PyTorch实战
全面掌握胶囊网络:从基础理论到PyTorch实战
665 0
|
算法 搜索推荐 C语言
C语言循环语句的深入探索与应用
C语言循环语句的深入探索与应用
153 0
|
搜索推荐 算法 Python
使用Python3配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)
个性化推荐可谓风生水起,Youtube,Netflix,甚至于Pornhub,这些在互联网上叱咤风云的流媒体大鳄无一不靠推荐系统吸引流量变现,一些电商系统也纷纷利用精准推荐来获利,比如Amzon和Shopfiy等等,精准推荐用事实告诉我们,流媒体和商品不仅仅以内容的传播,它还能是一种交流沟通的方式。
使用Python3配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)
|
传感器 测试技术
嵌入式软件测试笔记1 | 简单说明 & 嵌入式系统认识和测试目标
嵌入式软件测试笔记1 | 简单说明 & 嵌入式系统认识和测试目标
9618 0