代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合

216.组合总和III

题目链接:https://leetcode.cn/problems/combination-sum-iii/
文档讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html
视频讲解:https://www.bilibili.com/video/BV1wg411873x

思路

  • 未剪枝优化:进入回溯前计算当前path里的总和,如果和=n且长度=k,就结束。下面循环的部分和昨天的组合问题是一样的。
  • 剪枝优化:
    • 当sum>n时;
    • 当后面的数个数小于k时。

代码

未剪枝优化

class Solution {int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(k, n, 0);return res;}public void backtracking(int k , int n, int startIndex) {int sum = 0;for (int num : path) sum += num;if (sum == n && path.size() == k) {res.add(new ArrayList<>(path));return;}for (int i = startIndex; i < nums.length; i++) {path.add(nums[i]);backtracking(k, n, i + 1);path.removeLast();}}
}

卡哥代码 - 未剪枝优化

没有定义nums数组,直接在循环中用i的值,并且把sum作为参数放入回溯。

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(k, n, 0, 1);return res;}public void backtracking(int k, int n, int sum, int startIndex) {if (path.size() == k) { // 长度等于k就可以结束了if (sum == n) res.add(new ArrayList<>(path)); // 总和等于n就可以加入resreturn;}for (int i = startIndex; i <= 9; i++) {sum += i;path.add(i);backtracking(k, n, sum, i + 1);path.removeLast();sum -= i;}}
}

剪枝优化

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(k, n, 0, 1);return res;}public void backtracking(int k, int n, int sum, int startIndex) {if (sum > n) return; // 剪枝if (path.size() == k) { /if (sum == n) res.add(new ArrayList<>(path)); return;}for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝sum += i;path.add(i);backtracking(k, n, sum, i + 1);path.removeLast();sum -= i;}}
}

17.电话号码的字母组合

题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
文档讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D…
视频讲解:https://www.bilibili.com/video/BV1yV4y1V7Ug

思路

本题的深度是由digits的长度决定的,每往下一层是对不同数组对应的字母进行遍历。而宽度是数组对应的字母的长度。

代码

class Solution {List<String> res = new ArrayList<>();String[] letterMap = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};public List<String> letterCombinations(String digits) {if (digits == null || digits.length() == 0) return res;backtracking(digits, 0, "");return res;}public void backtracking(String digits, int index, String s) { // index判断目前走到那个数字了if (index == digits.length()) {res.add(s);return;}int digit = digits.charAt(index) - '0';String letter = letterMap[digit];for (int i = 0; i < letter.length(); i++) {backtracking(digits, index + 1, s + letter.charAt(i)); // 隐藏回溯}}
}

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

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

相关文章

Kubernetes 文档 / 概念 / 服务、负载均衡和联网 / EndpointSlice

Kubernetes 文档 / 概念 / 服务、负载均衡和联网 / EndpointSlice 此文档从 Kubernetes 官网摘录 中文地址 英文地址 Kubernetes 的 EndpointSlice API 提供了一种简单的方法来跟踪 Kubernetes 集群中的网络端点&#xff08;network endpoints&#xff09;。EndpointSlices 为…

Python:由b站临时短链接获取到永久链接(去除分享中的杂项)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

首套真题解析!安徽211难度适中!两门课!

这个系列会分享名校真题。并做详细解析&#xff01;此为24年第一套&#xff01; 今天分享的是22年合肥工业856的信号与系统试题及解析。 小马哥Tips&#xff1a; 本套试卷难度分析&#xff1a;本套试题内容难度中等&#xff0c;里面较多的考察了信号与系统的知识&#xff0c…

Java—自定义异常

如何自定义异常 在你的自定义异常类中提供一个构造函数来调用父类 Exception 的构造函数&#xff0c;并传递异常消息。这样做可以确保异常消息能够被正确地设置并且可以被捕获和处理。 下面是一个更完整的例子&#xff0c;展示了如何在自定义异常类中提供构造函数来传递异常消…

图论第三天

似乎要团建了&#xff0c;我再猫会。我必须参与上团建再走。 130.被围绕的区域 先把外围的O变成A&#xff0c;再把飞地的O变成X&#xff0c;再把外围A变回O class Solution { public:int neighbor[4][2] {1,0,0,-1,-1,0,0,1};void solve(vector<vector<char>>&a…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议&#xff0c;在传输之前需要形成三次握手形成会话 只有会话形成了&#xff0c;服务端和客户端才能想发送数据&#xff0c;在创建会话的过程中&#xff0c;服务端和客户…

Mac vm虚拟机激活版:VMware Fusion Pro for Mac支持Monterey 1

相信之前使用过Win版系统的朋友们对这款VMware Fusion Pro for Mac应该都不会陌生&#xff0c;这款软件以其强大的功能和适配能力广受用户的好评&#xff0c;在Mac端也同样是一款最受用户欢迎之一的虚拟机软件&#xff0c;VM虚拟机mac版可以让您能够轻松的在Apple的macOS和Mac的…

字符串转换为整数

在Java中&#xff0c;将字符串转换为整数通常使用Integer.parseInt()方法。这是一个静态方法&#xff0c;可以直接将字符串表示的数字转换为整数。让我们详细解释这个过程&#xff0c;并提供一些示例代码。 Integer.parseInt()方法 语法 int number Integer.parseInt(Strin…

Java(八)——String类

文章目录 String类String的构造及内存分布构造内存分布 常用方法判等比较查找转化替换拆分截取 字符串的不可变性StringBuilder和StringBuffer String类 C语言中没有专门的字符串类型&#xff0c;一般使用字符数组或字符指针表示字符串&#xff0c;而字符串的函数需要包含头文…

【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps

目录 一、Secrets &#xff08;一&#xff09;Secrets概述 &#xff08;二&#xff09;Secrets类型 &#xff08;三&#xff09;Secrets使用方式 &#xff08;四&#xff09;创建Secrets 1.陈述式命令创建 1.1 定义用户与密码文件 1.2 使用陈述式命令创建 2.使用base6…

详解智慧互联网医院系统源码:开发医院小程序教学

本篇文章&#xff0c;笔者将详细介绍智慧互联网医院系统的源码结构&#xff0c;并提供开发医院小程序的详细教学。 一、智慧互联网医院系统概述 智慧互联网医院系统涵盖了预约挂号、在线咨询、电子病历、药品管理等多个模块。 二、系统源码结构解析 智慧互联网医院系统的源码…

OpenShift 4 - OpenShift Service Mesh 3 预览

《OpenShift / RHEL / DevSecOps 汇总目录》 了解 OpenShift Service Mesh 3 的变化 OpenShift Service Mesh 是一套在 OpenShift 上安装部署、跟踪监控 Istio 运行环境的实现。红帽在 2023 年底推出了技术预览版的 OpenShift Service Mesh 3&#xff0c;它和目前的 OpenShif…

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问&#xff0c;为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题&#xff0c;会不会是自己在使用的过程中错误的操作违反了平台的规则&#xff0c;其实不然有可能会是IP代理池纯净度不高的问题&#xff0c;有可能自己在使…

UI线程和工作线程

引用&#xff1a;windows程序员面试指南 工作线程 只处理逻辑的线程&#xff0c;例如&#xff1a;启动一个线程&#xff0c;用来做一个复杂的计算&#xff0c;计算完成之后&#xff0c;此线程就自动退出&#xff0c;这种线程称为工作线程 UI线程 Windows应用程序一般由窗口…

Ansible05-Ansible进阶(流程控制、Roles角色、加密优化调优等)

目录 写在前面7 Ansible 进阶7.1 流程控制7.1.1 handlers触发器与notify7.1.1.1 未使用handlers7.1.1.2 使用handlers 7.1.2 when判断7.1.2.1 when的语法7.1.2.2 when判断主机名选择模块输出7.1.2.3 when结合register变量 7.1.3 loop/with_items循环7.1.3.1 with_items案例7.1.…

本地公网IP是什么?

本地公网IP&#xff08;Public IP Address&#xff09;是指分配给计算机或设备的可在互联网上直接访问的唯一标识符。每个连接到互联网的设备都会被分配一个公网IP&#xff0c;用于与其他设备进行通信。本地公网IP在网络通信中起到了非常重要的作用&#xff0c;为用户提供了方便…

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库小版本不同&#xff09;&#xff0c;源机器和目标机器部…

网易有道QAnything使用CPU模式和openAI接口安装部署

网易有道QAnything可以使用本地部署大模型(官网例子为qwen)也可以使用大模型接口(OPENAI或者其他大模型AI接口 )的方式,使用在线大模型API接口好处就是不需要太高的硬件配置。 本机环境windows11 首先安装WSL环境, 安装方法参考https://zhuanlan.zhihu.com/p/671942941 安装…

[数据集][目标检测]手枪检测数据集VOC+YOLO格式3000张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3000 标注数量(xml文件个数)&#xff1a;3000 标注数量(txt文件个数)&#xff1a;3000 标注…

STM32作业实现(七)OLED显示数据

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…