代码随想录刷题笔记-Day23

1. 组合

77. 组合icon-default.png?t=N7T8https://leetcode.cn/problems/combinations/

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

解题思路

这种涉及到穷举的题,第一反应都是回溯实现。

考虑回溯三要素:

  • 回溯逻辑:每次都从i到进行循环,循环中进行递归
  • 终止条件:当k=0的时候,说明取完k个数了,终止,当i大于n的时候,说明取值不符合了,也终止
  • 参数:一个k表示还需要取的个数,一个n表示边界,一个i表示当前取值的开始边界

这样子是借助于回溯实现了暴力for循环。考虑进行优化:

在每次回溯算法的逻辑中,从i开始到n,如果i到n已经不够k个的时候,已经是无效了,可以直接终止;

代码

class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> list = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(k, n, 1);return result;}public void backtracking(int k, int n, int i) {if (k == 0) {result.add(new ArrayList<>(list));return;}if (n - i + 1 < k)return;if (i > n)return;for (; i <= n; i++) {list.add(i);backtracking(k - 1, n, i + 1);list.removeLast();}}
}

2. 组合总和III

216. 组合总和 IIIicon-default.png?t=N7T8https://leetcode.cn/problems/combination-sum-iii/

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

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

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

示例 2:

输入: 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
没有其他符合的组合了。

示例 3:

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

解题思路

使用回溯实现暴力for循环。

终结条件:k等于0的时候,终止,如果sum和n相等就加入result。

参数:k,n,sum,i

回溯逻辑:从i到9进行循环,在循环中进行递归。

剪枝优化:当sum已经大于result的时候,终止。当9-i+1<k的时候也终止。

代码

class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> list = new LinkedList<>();public List<List<Integer>> combinationSum3(int k, int n) {combinationHelper(k, n, 0, 1);return result;}private void combinationHelper(int k, int targetSum, int sum, int i) {if (k == 0 && targetSum == sum) {result.add(new ArrayList<>(list));return;}if (9 - i + 1 < k || sum > targetSum)return;for (; i <= 9; i++) {list.add(i);combinationHelper(k - 1, targetSum, sum + i, i + 1);list.removeLast();}}
}

3. 电话号码的字母组合

17. 电话号码的字母组合icon-default.png?t=N7T8https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

 解题思路

使用回溯来完成for循环。

代码

class Solution {List<String> result = new ArrayList<>();String[] letters = new String[] { "", " ", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };StringBuilder segment = new StringBuilder();public List<String> letterCombinations(String digits) {if (digits == null || digits.equals(""))return result;letterCombinationsHelper(digits, 0);return result;}public void letterCombinationsHelper(String digits, int i) {if (i == digits.length()) {result.add(segment.toString());return;}String temp = letters[digits.charAt(i) - '0'];for (int j = 0; j < temp.length(); j++) {segment.append(temp.charAt(j));letterCombinationsHelper(digits, i + 1);segment.deleteCharAt(segment.length() - 1);}}}

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

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

相关文章

【vue】provide/inject

provide/ inject这对选项需要一起使用&#xff0c;以允许一个祖先组件向其所有子孙后代注入一个依赖&#xff0c;不论组件层次有多深&#xff0c;并在起上下游关系成立的时间里始终生效。 通途点来讲可以用来实现隔代传值&#xff0c;传统的props只能父传子&#xff0c;而 prov…

【漏洞复现】大华DSS视频管理系统信息泄露漏洞

Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统&#xff0c;除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外&#xff0c;更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS视频管理系统存在信…

数字孪生低代码平台盘点(一):厂家介绍

特别说明&#xff1a;本文根据网上资料搜集整理而成&#xff0c;排名不分先后&#xff0c;配图是为了更好地阅读体验&#xff0c;并非表明该图为该平台所生产。如有错误之处&#xff0c;请在评论区提出。 一、优锘ChartBuilder 优锘ChartBuilder是一款基于Web的数据可视化工具…

“从根到叶:深入理解排序数据结构“

一.排序的概念及引用 1.1排序的概念 排序是指将一组数据按照一定的规则重新排列的过程。排序的目的是为了使数据具有有序性&#xff0c;便于查找、插入、删除等操作&#xff0c;提高数据的组织和管理效率。 稳定性是指如果序列中存在相等元素&#xff0c;在排序完成后&#…

总结一下最近几个主界面

目前展示了用Avalonia做几个主要流行的主界面&#xff0c;演示了一下组件的使用。用不同的实现方式实现一些方法。 1、独立大屏展示&#xff0c;类似一个实时监控&#xff0c;这是一种目前很方便的大屏效果。 主要涉及的内内容&#xff1a; &#xff08;1&#xff09;窗标题实…

springboot750人职匹配推荐系统

springboot750人职匹配推荐系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

机器学习——线性回归算法、代价函数、梯度下降算法基础

线性回归 还是以之前的预测房价为例&#xff0c;根据不同尺寸的房子对应不同的售价组成的数据集画图&#xff0c;图如下 监督学习算法工作流程 假设函数其实就是我们所说的函数&#xff0c;在房价这个例子中&#xff0c;我们可以从上图中看出房价和房子面积是一个一元的线性函…

【openGL教程08】关于着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容&#xff0c;客户如果想自我实现渲染灵活性&#xff0c;可以用着色器进行编程&#xff0c;这种程序小脚本被传送到GPU的显卡内部&#xff0c;起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

windows下onlyoffice重启

winr之后输入services.msc打开服务&#xff0c;找到ONLYOFFICE相关的服务全部重启即可 参考

ClickHouse 指南(三)最佳实践 -- 稀疏主索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中&#xff0c;我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

【前端素材】推荐优质后台管理系统PORTAL平台模板(附源码)

一、需求分析 后台管理系统是一种具有多层次结构的软件系统&#xff0c;用于管理网站、应用程序或系统的后台操作和管理。下面是对后台管理系统的分层次、详细分析&#xff1a; 第一层&#xff1a;用户界面层 登录界面&#xff1a;提供用户登录验证&#xff0c;确保只有经过授…

Java Stream API的二度深入

Java Stream API的二度深入 前言 为什么会写这样一篇文章呢&#xff1f; 1.面试的时候&#xff0c;一位前辈对我这方面有过一次提问&#xff0c;我随口回答&#xff0c;前辈很信任我&#xff0c;以此文致敬前辈&#xff01; 2.去回顾&#xff0c;去扎实&#xff0c;对得起前辈的…