Java——组合总和(3)

news2024/12/28 20:28:09

题目链接

leetcode在线oj——组合总和(3)

题目描述

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

题目示例

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。

输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。

题目提示

  • 2 <= k <= 9
  • 1 <= n <= 60

题目思路

我们可以使用递归,将所有可能的组合方式都排列出来,然后验证其总和是否为n,如果是n就将结果添加到list中

我们需要一个全局变量list,在所有递归中使用,并且递归需要定义当前的位置,1-9一共n个,数字总数k,需要的组合的总和sum,如果当前list的size已经超过k,或者就算当前list加上后面所有的数字都无法到达k个,说明已经不满足条件了,就返回上一个状态

如果当前list的size正好等于k,那么就验证list所有数字加起来是否为n,是就添加进result中,否则就返回上一个状态

完整代码

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> list = new ArrayList<>();

    public List<List<Integer>> combinationSum3(int k, int n) {
       dfs(1, 9, k, n);
       return result;
    }

    private void dfs(int cur, int n, int k, int sum) {
        if(list.size() + (n - cur + 1) < k || list.size() > k){
            return;
        }
        if(list.size() == k){
            int count = 0;
            for (int x:list) {
                count += x;
            }
            if(count == sum){
                result.add(new ArrayList(list));
                return;
            }
        }
        list.add(cur);
        dfs(cur + 1, n, k, sum);
        list.remove(list.size() - 1);
        dfs(cur + 1, n, k, sum);
    }
}

代码执行流程图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 —— TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制

计算机网络系列文章目录 TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制 文章目录计算机网络系列文章目录前言4.2 TCP 重传、滑动窗口、流量控制、拥塞控制4.2.1 重传机制超时重传什么情况会触发超时重传超时时间应该设置为多少呢&#xff1f;快速重传SACKD-SACK4.2.2 滑动窗…

【数据结构之二叉树系列】万字深剖数据结构---堆

目录前言一、堆二、堆的实现(重点)1. 数据类型重定义2. 堆结构的定义3. 堆结构的重定义三、堆中常见的基本操作&#xff08;重点&#xff09;1. 声明2. 定义&#xff08;1&#xff09;初始化&#xff08;2&#xff09;销毁&#xff08;3&#xff09;插入数据&#xff08;4&…

macOS Monterey 12.6.3 (21G419) 正式版 ISO、IPSW、PKG 下载

macOS Monterey 12.6&#xff0c;皆为安全更新&#xff0c;不再赘述。 macOS Monterey 12.6&#xff0c;发布于 2022 年 9 月 12 日&#xff08;北京时间今日凌晨&#xff09;&#xff0c;本次为安全更新。 今日&#xff08;2022-07-21&#xff09;凌晨&#xff0c;Apple 终于…

ATAC-seq分析:Peak Calling(8)

1. 寻找开发区域 ATACseq 的一个共同目标是识别转录因子结合和/或转录机制活跃的无核小体区域。该核小体游离信号对应于小于一个核小体的片段&#xff08;如 Greenleaf 论文中定义 < 100bp&#xff09;。 然而&#xff0c;为了识别开放的染色质&#xff0c;我们可以简单地使…

意想不到的结果:Foo(m)可能是在定义名为m的对象

文章目录例一&#xff1a;Foo(m); 是定义名为 m 的对象例二&#xff1a;Foo(m).i; 传入实参 m例三&#xff1a;func(Foo(m)); 传入实参 m例四&#xff1a;S(cout)(1) 定义名为 cout 的对象例五&#xff1a;S(std::cout)(1) 传入实参 std::cout你知道吗&#xff0c;如果 Foo 是…

vue3 watch 监听响应式数据变化

主要是用来监听ref 或者reactive 所包裹的数据才可以被监听到 <template><input type"text" v-model"message"> </template> <script setup lang"ts">import {ref, watch} from "vue";let message ref<s…

powerdesigner画UML组件图初步

组件图 组件图是用来描述组件与组件之间关系的一种UML图&#xff0c;组件图在宏观层面上显示了构成系统某一特定方面的实现结构。 组件图可以用来显示组件之间的依赖关系&#xff0c;以及组件的接口和调用关系。 组件图由组件&#xff0c;接口&#xff0c;组件图中的关系&…

20230124英语学习

Why Do We Still Procrastinate Despite It Causing So Much Stress? 明知道拖延不好&#xff0c;为何还会拖延&#xff1f; Are you procrastinating?I am.I have been delaying writing this article for the last few days even though I knew I had a deadline. I have …

从零到一:复现 DIR-815 栈溢出漏洞

从零到一&#xff1a;复现 DIR-815 栈溢出漏洞 实验环境 执行命令uname -a可以查看到当前系统版本 我这边采用桥接模式进行实验。 环境搭建 文章命令操作均在root下操作&#xff0c;且git clone xxxx.git下载所用到工具都均下载保存到/opt/tools/文件夹下&#xff0c;方便统…

OKC和802.11R的知识小科普

欢迎来到东用知识小课堂&#xff01;1.什么是漫游简单来说&#xff0c;就是设备从一个AP&#xff0c;连接到另一个AP。IP地址不需要重新申请。整个过程需要尽可能快的进行&#xff0c;否则对于用户而言&#xff0c;就会发现网络出现卡顿。而为了安全&#xff0c;网络的认证过程…

【Python】使用pyinstaller打包py程序为exe应用程序时,出现“Tcl报错闪退”的解决办法

问题概述 使用pyinstaller -F的命令进行py程序转为exe程序时&#xff0c;打包后的exe程序会出现闪退报错的情况&#xff1a; 解决办法 1. 检查“环境变量”tcl和tk是否配置好&#xff1a; 查看系统高级设置>>>环境变量>>>系统变量 博主使用anaconda进行p…

河道污染物识别系统 python

河道污染物识别系统通过pythonyolo深度学习技术&#xff0c;对现场画面中河道污染物以及漂浮物进行全天候实时监测&#xff0c;当监测到出现污染物漂浮物时&#xff0c;立即抓拍存档触发告警。与C / C等语言相比&#xff0c;Python速度较慢。也就是说&#xff0c;Python可以使用…

计算机组成原理 | 第一章:概论

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

Froala Editor内容中删除内联样式

Froala Editor内容中删除内联样式 易于集成-编辑器可以在任何时间内集成到任何类型的项目中。它只需要基本的JavaScript和HTML编码知识。 流行-HTML编辑器在开发人员中很流行&#xff0c;它有最流行的开发框架的插件。 易于升级-将所有自定义内容与编辑器文件夹分开&#xff0c…

3.1存储系统基本概念

文章目录一、引子二、存储器的层次化结构1.层次化结构&#xff08;1&#xff09;金字塔&#xff08;2&#xff09;案例&#xff08;3&#xff09;Cache&#xff08;4&#xff09;寄存器&#xff08;5&#xff09;辅存和外存2.速度与价格举例&#xff08;1&#xff09;主存和Cac…

智障税品牌种草收割流

1.量化量化这一块我后续应该不更新了&#xff0c;因为目前我接触的都是赚钱层次的了发出去都是砸自己的饭碗目前我在8个交易所都是市商费率有需要费率的可以合作我在跑的策略为&#xff1a;套利、高频、预测《赚麻》当你有了顶级费率和速度&#xff0c;什么策略都可以赚钱2.引流…

88.【员工管理系统-springBoot】

SpringBoot(十三)、员工管理系统SpringBoot1.准备工作(1).导入我们所需要的环境依赖(2).首页的Controller与View (静态资源Thymeleaf接管)2.国际化(1).设置字符编码为UTF-8(2).添加文件资源目录 i18n(3).注册国际化实现(4).国际化的实现 index.html(5).英文与汉文的交互(6).在s…

[QMT]08-从本地行情数据解析历史K线信息

用python解析QMT本地数据获取本地行情数据get_local_data(field_list[], stock_code[], period1d, start_time, end_time, count-1,dividend_typenone, fill_dataTrue, data_dirdata_dir)释义从本地数据文件获取行情数据&#xff0c;用于快速批量获取历史部分的行情数据参数fie…

谈谈线程安全问题及其解决方法

本文讲述一下线程的安全问题及解决方法。 一 线程安全问题举例说明 在电影院售票的场景&#xff0c;假使有100张票待售&#xff0c;有3个窗口在售票&#xff0c;如图所示&#xff1a; 三个窗口都卖出票1&#xff0c;一个票被卖了3次&#xff0c;多线程访问共享数据“票”&am…

【代码阅读】MSC-VO

MSC-VO是ICRA2022的一篇点线视觉SLAM论文&#xff0c;本身是在ORBSLAM2的基础上改进的&#xff0c;改进的部分在于为SLAM系统引入了线段&#xff0c;并且使用了曼哈顿坐标系与结构化约束进行优化&#xff0c;之前看过的论文记录可以参考链接&#xff0c;年前把线段匹配和均匀化…