LeetCode、216. 组合总和 III【中等,组合型枚举】

文章目录

  • 前言
  • LeetCode、216. 组合总和 III【中等,组合型枚举】
    • 题目类型与分类
    • 思路
  • 资料获取

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、216. 组合总和 III【中等,组合型枚举】

题目类型与分类

题目链接:LeetCode、216. 组合总和 III

题目类型:搜索与图论/回溯、基础算法/枚举(组合型枚举,n个数中取m个)


思路

思路描述:组合型枚举+选中的符合条件的情况案例

组合型模板直接套上,然后对选中的几个位置(state数组元素不为0的)求下和看是否是目标值,若是的话将这条情况添加到结果集中。

中间过程对于在1-9中是否选中,我们根据一个state数组来进行表示。

复杂度分析:时间复杂度O(mn!),空间复杂度O(1)

import java.util.ArrayList;
import java.util.List;

class Solution {

    public int n, m;
    public int[] state;//若为0表示没有选中,不为0表示选中
    public List<List<Integer>> res;

    //组合型枚举,n个数中取m个
    //本题为:1-9中取k个,和为n
    public List<List<Integer>> combinationSum3(int k, int sum) {
        //表示从9个中选k个
        this.n = 9;
        this.m = k;
        this.state = new int[n];
        this.res = new ArrayList<>();
        dfs (0, 0, sum);
        return res;
    }

    /**
     * @param u 总计达到k个(取的k个数量)
     * @param start 当前应当开始的位置
     */
    public void dfs (int u, int start, int sum) {
        //提前剪枝
        //u表示当前取了几个  n - start表示还有几个未取
        //若是两个相加不满足我们最终要取的个数,那么直接结束
        if (u + (n - start) < m) return;
        //若是刚好已经取到了m个
        if (u == m) {
            List<Integer> choice = new ArrayList<>();
            int s = 0;
            for (int i = 0; i < n; i++) {
                if (state[i] != 0) {
                    s += state[i];
                    choice.add(state[i]);
                }
            }
            if (s == sum) {
                res.add(choice);
            }
        }
        for (int i = start; i < n; i ++) {
            state[i] = i + 1;
            dfs (u + 1, i + 1, sum);
            state[i] = 0;
        }
    }


}

image-20240131161400905


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 时间:2024.1.31

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB | 绘图复刻(十四) | 右侧对齐桑基图,及工具函数SSankey更新

hey 真的好久不见了&#xff0c;本期既是一期绘图复刻教程&#xff0c;也是我写的工具函数的版本更新&#xff0c;本期复刻的图片来自《Nature》&#xff1a; Elmarakeby, H.A., Hwang, J., Arafeh, R. et al. Biologically informed deep neural network for prostate cancer…

构建互联网医院系统:数字化医疗的代码之旅

在互联网时代&#xff0c;医疗服务也在逐步数字化&#xff0c;而构建一个互联网医院系统成为了医疗领域的一项创新。在这篇文章中&#xff0c;我们将探讨如何通过技术代码构建一个基础的互联网医院系统&#xff0c;为患者和医生提供便捷、高效的医疗服务。 1. 环境搭建与前端…

ES6中新增Array.from()函数的用法详解

目录 Map对象的转换 Set对象的转换 字符串的转换 类数组对象的转换 Array.from可以接受三个参数 ES6为Array增加了from函数用来将其他对象转换成数组。当然&#xff0c;其他对象也是有要求&#xff0c;也不是所有的&#xff0c;可以将两种对象转换成数组。 1、部署了Iter…

【BIAI】Lecture 13 - Language processing

Language processing 专业术语 Aphasia 失语症 fMRI 功能性磁共振成像 auditory cortex 听觉皮层 motor cortex 运动皮层 primary visual cortex 初级视觉皮层 permotor cortex 前运动皮层 课程概要 What is language 语言是一种用词汇按照语法规则组合来表示和交流信息的系统…

将.sqlite文件转化为.sql文件并存入mysql数据库

场景描述 今天在处理Bird数据&#xff0c;里面都是.sqlite格式的文件&#xff0c;我需要把这些文件都存到mysql数据库里面。具体的流程如下。 1、.sqlite转化为.sql 在当前目录下打开终端 sqlite3 movie_platform.sqlite .dump > movie_platform.sql2、存入mysql 在 MyS…

Spring Data Envers 数据审计实战2 - 自定义监听程序扩展审计字段及字段值

上篇讲述了如何在Spring项目中集成Spring Data Envers做数据审计和历史版本查看功能。 之前演示的是业务表中已有的字段进行审计&#xff0c;那么如果我们想扩展审计字段呢&#xff1f; 比如目前对员工表加入了Audited审计&#xff0c;员工表有个字段为dept_id&#xff0c;为…

第16届大广赛命题详情它来啦!

“中国大学生创造力”全国大学生广告艺术竞赛&#xff08;以下简称&#xff1a;广播竞赛&#xff09;作为高水平三维生产教育一体化、科学教育一体化竞争平台&#xff0c;坚持高地位&#xff0c;基于大模式&#xff0c;在19年的发展过程中&#xff0c;坚持道德培养人才的基础&a…

高速接口PCB布局指南(一)高速信号接口概述

高速接口PCB布局指南&#xff08;一&#xff09;高速信号接口概述 1.什么是高速信号接口&#xff1f;2.高速信号PCB设计概述2.1 概述2.2 关键信号 tips&#xff1a;资料主要来自网络&#xff0c;仅供学习使用。 1.什么是高速信号接口&#xff1f; 高速信号接口是指用于传输高…

计算机毕业设计 基于SpringBoot的宠物爱心组织管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

蓝桥杯省赛无忧 组合数学 课件102 计数原理

01 前置基础知识 02 分类加法 03 分步乘法

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Radio组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Radio组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Radio组件 单选框&#xff0c;提供相应的用户交互选择项。 子组件 无。 接口 …

c语言--指针的传值调用和传址调用

目录 一、前言二、传值调用。三、传址调用四、总结 一、前言 学习指针的目的是使用指针解决问题&#xff0c;那什么问题&#xff0c;非指针不可呢&#xff1f; 二、传值调用。 写个函数&#xff0c;交换两个整数的内容。 #include<stdio.h> void Swap1(int x, int y)…

计算机毕业设计 | springboot商城售后管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 在数字化时代的推动下&#xff0c;产品售后服务管理机构面临着信息化和网络化的挑战。传统的手工管理和纸质档案已经无法满足管理人员和读者的需求。为了提高产品售后服务管理机构的管理效率和服务质量&#xff0c;开发和实现一个基于Java的售…

Linux项目自动化构建工具之make/Makefile演示gcc编译

文章目录 一、背景二、如何使用&#xff1f;三、原理四、关于make的问题五、再次理解/编写makefile依赖关系依赖方法 六、原理讲解项目清理makefile是支持变量的取消执行make后显示命令依赖方法可以多行 一、背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备…

仪器接口设计

不是所有设备都是TCP连接模式&#xff0c;有读文件的、读数据库的设备&#xff0c;为此还需要一个客户端仪器接口程序&#xff0c;面向接口编程是一个良好的思想&#xff0c;他使得调用者和接口实现者不用绑定太死&#xff0c;只要双方按约定实现即可。 仪器有读文件的、写文件…

学习Android的第四天

目录 Android FrameLayout ( 帧布局 ) FrameLayout size 大小 FrameLayout 属性 Android GridLayout ( 网格布局 ) GridLayout 属性 计算器布局 Android AbsoluteLayout 绝对布局 AbsoluteLayout 四大控制属性 Android FrameLayout ( 帧布局 ) FrameLayout 是 Android…

家政小程序系统开发:从构思到实现

随着科技的快速发展&#xff0c;移动互联网已经深入到我们生活的方方面面。特别是在家政服务领域&#xff0c;传统的服务方式已经不能满足现代人的需求。因此&#xff0c;开发一款家政小程序系统显得尤为重要。本文将介绍家政小程序系统的开发过程&#xff0c;包括需求分析、设…

SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接

目录 一、下载 二、安装配置 1.安装 2.许可条款 3.安装程序支持文件 4.功能选择 5.实例配置 6.服务器配置 7.数据库引擎配置 8.Reporting Services 配置 9.安装进度 ​编辑 10.完成 三、使用 四、新建登录用户 1.新建登录名 2.常规 3.服务器角色 4. 用户映…

算法学习——LeetCode力扣链表篇1

算法学习——LeetCode力扣链表篇1 203. 移除链表元素 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 示例 …

thinkphp数据批量提交(群发消息)

<form id="edit-form" class="form-horizontal" role="form" data-toggle<