LeetCode_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 <= 20
  • 1 <= k <= n

解题思路

回溯法

将组合问题抽象成如下树形结构,每次从集合中选取元素,可选择的范围随着选择的进行而收缩,调整可选择的范围。图中可以发现n相当于树的宽度,k相当于树的深度。图中每次搜索到了叶子节点,我们就找打了一个结果77.组合

回溯法三部曲
  • 递归函数的参数和返回值
    • n,k,startIndex,用来记录本层递归中,集合从哪里开始遍历
    • path:用来存放符合条件的结果
    • ans:用来存放符合条件结果的集合
  • 回溯函数终止条件
    • 到达叶子节点。也就是path这个数组的大小达到k,说明已经找打了一个子集大小为k的组合了,在图中path存的就是根节点到叶子节点的路径了。
    • 此时用ans数组将结果保存起来,并终止本层递归
  • 单层逻辑
    • for循环进行横向遍历,具体来说是每次从startIndex开始遍历,然后用path保存取到的节点i
剪枝优化

77.组合4

如图所示,可以剪枝的地方就在递归中每一层的for循环选择的起始位置

  • 如果for循环选择的起始位置之后的元素个数已经不足我们需要的元素个数了,那么就没有必要搜索了

AC代码

class Solution {
public static List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        backTracing(n, k, 1, path, ans);
        return ans;
    }

    private static void backTracing(int n, int k, int startIndex, List<Integer> path, List<List<Integer>> ans) {

        //终止条件
        if (path.size() == k) {
            ans.add(new ArrayList<>(path));
            return;
        }
        for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) {
            path.add(i);
            backTracing(n, k, i + 1, path, ans);
            //回溯
            path.remove(path.size() - 1);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode 是一个常用的编程学习和面试准备平台,而人工智能 (AI) 处理器组合指的是在处理 LeetCode 题目时,使用多个不同类型的 AI 处理器来提高算法性能和效率。 首先,AI 处理器是具有强大计算能力和优化算法的专用芯片。与传统的通用处理器相比,AI 处理器在处理大量数据和复杂计算任务时表现更佳。 AI 处理器组合意味着将不同类型的 AI 处理器结合使用,以便在编程和解决 LeetCode 题目时获得更好的性能。这些处理器可以包括图像处理单元 (GPU),张量处理单元 (TPU),以及专门针对特定AI应用开发的ASIC等。 在处理 LeetCode 题目时,AI 处理器组合可以带来多个好处。首先,AI 处理器具有并行计算能力,能够同时处理多个任务,从而加快算法的执行速度。其次,AI 处理器通过优化算法和模型,可以提高解题的准确性和效率。例如,对于一些图像和语音处理相关的题目,使用 GPU 或 TPU 可以加速图像和声音的处理,从而更快地得到正确答案。 另外,AI 处理器组合还可以提供更多的资源和内存,以支持处理大规模数据和复杂问题。这对于一些需要使用深度学习或机器学习算法的题目非常重要,因为这些算法通常需要更多的计算资源和存储空间。 综上所述,AI 处理器组合对于处理 LeetCode 题目具有巨大的潜力。它可以加快算法的执行速度,提高解题的准确性和效率,并支持处理大规模数据和复杂问题。然而,组合不同类型的 AI 处理器需要适当的编程技巧和技术知识,以便充分发挥它们的优势和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值