当前位置: 首页 > news >正文

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个,和为npublic 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

相关文章:

  • Linux介绍和命令使用
  • 办公软件巨头CCED、WPS面临新考验,新款办公软件异军突起
  • 计算机设计大赛 深度学习 python opencv 火焰检测识别
  • unity-ios-解决内购商品在Appstore上面已配置,但在手机测试时却无法显示的问题
  • 机器学习 | 深入集成学习的精髓及实战技巧挑战
  • 【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法
  • 详解计算机软件基本概念
  • VPS与云计算有什么区别?
  • 图数据库neo4j入门
  • 备战蓝桥杯---搜索(完结篇)
  • java 回答问题
  • Blender教程(基础)-顶点的移动、滑移-16
  • go-基于逃逸分析来提升性能程序
  • Java基础常见面试题总结-集合(二)
  • 6. 尚硅谷大数据111门技术+42个项目
  • 分享一款快速APP功能测试工具
  • 《深入 React 技术栈》
  • Android 架构优化~MVP 架构改造
  • download使用浅析
  • go语言学习初探(一)
  • Gradle 5.0 正式版发布
  • JavaScript实现分页效果
  • Java的Interrupt与线程中断
  • JS题目及答案整理
  • JS专题之继承
  • maven工程打包jar以及java jar命令的classpath使用
  • miaov-React 最佳入门
  • OSS Web直传 (文件图片)
  • use Google search engine
  • webpack项目中使用grunt监听文件变动自动打包编译
  • windows-nginx-https-本地配置
  • 初探 Vue 生命周期和钩子函数
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 搭建gitbook 和 访问权限认证
  • 回流、重绘及其优化
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 积累各种好的链接
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​520就是要宠粉,你的心头书我买单
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (转)Google的Objective-C编码规范
  • (转)Mysql的优化设置
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***测试-HTTP方法
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • . NET自动找可写目录
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .htaccess配置常用技巧
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net 8.0 新的变化
  • .net core 6 集成 elasticsearch 并 使用分词器