【算法与数据结构】216、LeetCode组合总和 III

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:本题可以直接利用77题的代码【算法与数据结构】77、LeetCode组合,稍作修改即可使用。
  程序如下

class Solution {
private:vector<vector<int>> result;     // 结果合集vector<int> path;void backtracking(int n, int k, int startIndex) {if (path.size() == k) {if(accumulate(path.begin(), path.end(), 0) == n)    result.push_back(path);               return;}for (int i = startIndex; i <= n; i++) {path.push_back(i);  // 处理节点backtracking(n, k, i + 1);  // 递归path.pop_back();    // 回溯,撤销处理的节点}}
public:vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ 2 n ) O(n*2^n) O(n2n)
  • 空间复杂度: O ( n ) O(n) O(n)
      考虑到代码的效率,进一步修改代码,做剪枝优化:
class Solution {
private:vector<vector<int>> result;     // 结果合集vector<int> path;void backtracking(int n, int k, int sum, int startIndex) {if (sum > n) return;    // 剪枝if (path.size() == k) {           if(sum == n)    result.push_back(path);               return;}for (int i = startIndex; i <= 9 -(k - path.size()) + 1; i++) {sum += i;path.push_back(i);  // 处理节点backtracking(n, k, sum, i + 1);  // 递归sum -= i;   // 回溯path.pop_back();    // 回溯,撤销处理的节点}}
public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(n, k, 0, 1);return result;}
};

三、完整代码

# include <iostream>
# include <vector>
using namespace std;class Solution {
private:vector<vector<int>> result;     // 结果合集vector<int> path;void backtracking(int n, int k, int sum, int startIndex) {if (sum > n) return;    // 剪枝if (path.size() == k) {           if(sum == n)    result.push_back(path);               return;}for (int i = startIndex; i <= 9 -(k - path.size()) + 1; i++) {sum += i;path.push_back(i);  // 处理节点backtracking(n, k, sum, i + 1);  // 递归sum -= i;   // 回溯path.pop_back();    // 回溯,撤销处理的节点}}
public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(n, k, 0, 1);return result;}
};int main() {int n = 7, k = 3;Solution s1;vector<vector<int>> result = s1.combinationSum3(k, n);for (vector<vector<int>>::iterator it = result.begin(); it != result.end(); it++) {for (vector<int>::iterator jt = (*it).begin(); jt != (*it).end(); jt++) {cout << *jt << " ";}cout << endl;}system("pause");return 0;
}

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/164655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(超详细讲解!!)第二十一节 特殊矩阵的压缩存储

1.压缩存储的目标 值相同的元素只存储一次 压缩掉对零元的存储&#xff0c;只存储非零元 特殊形状矩阵&#xff1a; 是指非零元&#xff08;如值相同的元素&#xff09;或零元素分布具有一定规律性的矩阵。 如&#xff1a; 对称矩阵 上三角矩阵 下三角矩阵 对角矩阵 准…

Linux安装配置awscli命令行接口工具及其从aws上传下载数据

官网技术文档有全面介绍&#xff1a;安装或更新 AWS CLI 的最新版本 - AWS Command Line Interface在系统上安装 AWS CLI。https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructionsawscli常用命令参考&…

C#中的DataTable使用

在C#中&#xff0c;DataTable 是一个非常重要的组件&#xff0c;它是System.Data命名空间下的一部分。它用于在内存中存储表格数据&#xff0c;可以看作是一个内存中的数据库表。以下是DataTable的一些主要特点和常用的操作&#xff1a; 特点 内存中的数据存储&#xff1a;Da…

【gogogo专栏】golang并发编程

golang并发编程 并发编程的工具goroutine介绍协程管理器sync.WaitGroup channel介绍readChannel和writeChannelclose的用法select的用法 通讯示例总结 并发编程的工具 在golang中&#xff0c;并发编程是比较简单的&#xff0c;不像java中那么麻烦&#xff0c;golang天然的支持协…

机器人制作开源方案 | 管内检测维护机器人

一、作品简介 作者&#xff1a;李泽彬&#xff0c;李晋晟&#xff0c;杜张坤&#xff0c;禹馨雅 单位&#xff1a;运城学院 指导老师&#xff1a;薛晓峰 随着我国的社会主义市场经济的飞速发展和科学技术的革新&#xff0c;各行各业的发展越来越离不开信息化和网络化的…

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

物联网水表有什么弊端吗?

物联网水表作为新一代智能水表&#xff0c;虽然在很大程度上提高了水资源的管理效率&#xff0c;但也存在一定的弊端。在这篇文章中&#xff0c;我们将详细讨论物联网水表的弊端&#xff0c;以帮助大家更全面地了解这一技术。 一、安全隐患 1.数据泄露&#xff1a;物联网水表通…

纳米软件科普-IC芯片测试都有哪些方法?

IC芯片测试的方法包括&#xff1a; 电气测试&#xff1a;这是芯片检测中最常见的一种方法&#xff0c;通过对芯片的电学特性进行测试&#xff0c;可以检测出电路连接是否正确、电气参数是否在规定范围内等问题。 功能测试&#xff1a;对芯片的功能进行全面测试&#xff0c;通…

RabbitMQ集群配置以及负载均衡配置

RabbitMQ集群配置以及负载均衡配置 环境配置集群配置安装rabbitmq启动rabbitmq开启远程登录添加用户并且授权用户添加数据存放目录和日志存放目录查看端口拷⻉erlang.cookie将mq-2、mq-3作为内存节点加⼊mq-1节点集群中查看集群状态添加一个新的队列 RabbitMq负载均衡配置-HAPr…

Kubernetes Dashboard 用户名密码方式登录

Author&#xff1a;rab 前言 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token 的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding 绑定即可&#xff0c;接下来是具体的操作…

网络测试工具—— iperf2 安卓APK 下载 及简单使用

网络测试工具—— iperf2 安卓APK 下载 及简单使用 前言一、iperf2是什么&#xff1f;二、使用步骤附上help中命令截图翻译总结 前言 项目上有一款安卓车机加载局域网图片加载非常慢&#xff0c;所以需要测试一个安卓车机设备的带宽&#xff0c;经过调研后使用到了iperf2。 一…