代码随想录算法训练营第二十七天|组合总和等

77 组合

1 描述

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

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

2 代码

class Solution:def combine(self, n: int, k: int) -> List[List[int]]:path = []rst = []def helper(start):end = n + 1 - (k - len(path) - 1)for i in range(start, end):path.append(i)if len(path) == k:rst.append(path[:])else:helper(i + 1)path.pop()returnhelper(1)return rst

 3 总结 

  • python 的参数传递,参考Python里参数是值传递还是引用传递? - 知乎 (zhihu.com)
  • global 关键字 与 nonlocal 关键字的用法(主要针对不可变对象) 

 216.组合总和III

1 描述

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

  • 所有数字都是正整数。
  • 解集不能包含重复的组合。

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

示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

2 代码

class Solution:def __init__(self):self.path = []self.sum_ = 0self.rst = []def combinationSum3(self, k: int, n: int) -> List[List[int]]:def helper(start):end = 10 - (k - len(self.path) - 1)for i in range(start, end):self.path.append(i)self.sum_ += iif len(self.path) == k and self.sum_ == n:self.rst.append(self.path[:])elif len(self.path) < k and self.sum_ < n:helper(i + 1)self.path.pop()self.sum_ -= ireturnhelper(1)return self.rst

17.电话号码的字母组合

1 描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

17.电话号码的字母组合

示例:

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

说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

2 代码

class Solution:def __init__(self):self.d = {'2':['a', 'b', 'c'],'3':['d', 'e', 'f'],'4':['g', 'h', 'i'],'5':['j', 'k', 'l'],'6':['m', 'n', 'o'],'7':['p', 'q', 'r', 's'],'8':['t', 'u', 'v'],'9':['w', 'x', 'y', 'z'],}self.path = []self.rst = []def letterCombinations(self, digits: str) -> List[str]:if not digits:return []def helper(i):if i == len(digits):self.rst.append(''.join(self.path))returnfor c in self.d[digits[i]]:self.path.append(c)helper(i + 1)self.path.pop()helper(0)return self.rst

39. 组合总和

1 描述

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。

示例 1:

  • 输入:candidates = [2,3,6,7], target = 7,
  • 所求解集为: [ [7], [2,2,3] ]

示例 2:

  • 输入:candidates = [2,3,5], target = 8,
  • 所求解集为: [ [2,2,2,2], [2,3,3], [3,5] ]

2 代码

class Solution:def __init__(self):self.path = []self.sum_ = 0self.rst = []def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:def helper(start):for i in range(start, len(candidates)):self.path.append(candidates[i])self.sum_ += candidates[i]if self.sum_ < target:helper(i)elif self.sum_ == target:self.rst.append(self.path[:])self.path.pop()self.sum_ -= candidates[i]returnhelper(0)return self.rst

40.组合总和II

1 描述

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次 。

注意:解集不能包含重复的组合。 

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
[1,2,2],
[5]
]

提示:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

2 代码

class Solution:def __init__(self):self.path = []self.rst = []self.sum_ = 0def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:candidates.sort() def helper(start):for i in range(start, len(candidates)):if i > start and candidates[i] == candidates[i - 1]:continueself.path.append(candidates[i])self.sum_ += candidates[i]if self.sum_ == target:self.rst.append(self.path[:])elif self.sum_ < target:helper(i + 1)else:self.path.pop()self.sum_ -= candidates[i]breakself.path.pop()self.sum_ -= candidates[i]helper(0)return self.rst

 

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

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

相关文章

数据仓库【2】:架构

数据仓库【2】&#xff1a;架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取&#xff08;Extraction&#xff09;2.1.2、数据转换&#xff08;Transformation&#xff09;2.1.3、数据加载&#xff08; Loading &#xff09; 2.2、ETL工具2.2.1、结构…

宝塔面板Linux服务器CentOS 7数据库mysql5.6升级至5.7版本教程

近段时间很多会员问系统更新较慢&#xff0c;也打算上几个好的系统&#xff0c;但几个系统系统只支持MYSQL5.7版本&#xff0c;服务器一直使用较低的MYSQL5.6版本&#xff0c;为了测试几个最新的系统打算让5.6和5.7并存使用&#xff0c;参考了多个文档感觉这种并存问题会很多。…

2023.12.25力扣每日一题——不浪费原料的汉堡制作方案

2023.12.25 题目来源我的题解方法一 数学 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1276 我的题解 方法一 数学 首先判断番茄的数量是不是偶数&#xff0c;若不是则不可能使用完材料&#xff0c;因为两种汉堡的对于番茄的消耗都是偶数&#xff1b;然后假设全部做小…

AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82

篇头 最近写文章&#xff0c;反复多次折腾AOSP代码&#xff0c;因通过网络repo sync aosp代码&#xff0c;能一次顺利下载的概率很低&#xff0c;以前就经常遇到&#xff0c;但从未总结&#xff0c;导致自己也要回头检索方法&#xff0c;所以觉得可以总结一下&#xff0c;涉及…

Vue核心语法、脚手架与组件化开发、VueRouterVuex、综合案例(待办事项工具)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、Vue核心语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name…

PSoc62™开发板之按键控制LED

实验目的 使用板子上的用户自定义按键控制LED亮灭&#xff0c;当按键按下时LED亮起来&#xff0c;不按下则不亮 电路图 按键电路 板子有两组按键&#xff0c;分别是系统复位按键和用户自定义按键&#xff0c;这里我们选择控制用户自定义按键&#xff0c;可以看到MCU_USER_B…

力扣labuladong——一刷day79

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣785. 判断二分图二、力扣886. 可能的二分法 前言 给你一幅「图」&#xff0c;请你用两种颜色将图中的所有顶点着色&#xff0c;且使得任意一条边的两个…

【华为OD题库-109】正整数excel编号的转换-java

题目 用过excel的都知道excel的列编号是这样的: a b c …z aa ab ac … az ba bb bc …yz za zb zc …Zz aaa aab aac …分别代表以下编号: 123.…26 2728 2. …52 53 54 5 …76 67767867.…702703704 705 …请写个函数&#xff0c;完成从一个正整数到这种字符串之间的转换。 输…

Multi-Drone based Single Object Tracking with Agent Sharing Network阅读笔记

Multi-Drone based Single Object Tracking with Agent Sharing Network阅读笔记 Abstract 搭载摄像头的无人机可以从更广阔的视角在空中动态跟踪目标&#xff0c;与静态摄像头或地面移动传感器相比具有优势。然而&#xff0c;由于外观变化和严重遮挡等多种因素&#xff0c;使…

Redis源码精读:哈希表

文章目录 前言代码位置哈希表核心代码rehash最后 前言 哈希表是Redis中非常重要的数据结构&#xff0c;这篇博客我们就一起来探索一下Redis中哈希表的奥秘&#x1f601; 代码位置 src/dict.h src/dict.c 哈希表 原理 哈希表用于键值对的存储和查找&#xff0c;通过哈希函…

网传鸿蒙月薪达到40-70K,是真是假......

据消息称&#xff0c;华为将于明年发布不兼容安卓的鸿蒙版本&#xff0c;这意味着未来鸿蒙将独立开发&#xff0c;成为华为的核心操作系统。 现在提出观点一和观点二供大家讨论&#xff1a; 观点一 认为鸿蒙不再兼容安卓&#xff0c;会导致华为失去大量用户和市场份额 观点…

liunx安装Docker Compose

你可以按照以下步骤安装 Docker Compose&#xff1a; 首先&#xff0c;确保你已经安装了 Docker。Docker Compose 是 Docker 的一个独立组件&#xff0c;通常不会随 Docker 一起安装。 1&#xff0c;使用以下命令下载 Docker Compose 的二进制文件&#xff1a; bash sudo c…

Autosar CAN开发05(从实际应用认识CAN波特率)

建议同时阅读本专栏的&#xff1a; Autosar CAN开发03&#xff08;从实际应用认识CAN总线的物理层&#xff09; Autosar CAN开发04&#xff08;从实际应用认识CAN报文&#xff09; Autosar CAN开发05&#xff08;从实际应用认识CAN波特率&#xff09; 前言 当知道了CAN的物…

R语言【dplyr】——arrange() 按所选列的值对数据集的行重新排序

Package dplyr version 1.1.4 Parameters arrange(.data, ..., .by_group FALSE)## S3 method for class data.frame arrange(.data, ..., .by_group FALSE, .locale NULL) 参数【.data】&#xff1a;数据集、数据集扩展&#xff08;如 tibble&#xff09;或 lazy data fr…

Spring 依赖注入概述、使用以及原理解析

前言 源码在我github的guide-spring仓库中&#xff0c;可以克隆下来 直接执行。 我们本文主要来介绍依赖注入的使用示例及其原理 依赖注入 什么是依赖注入 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种设计模式&#xff0c;它用于实现对…

嵌入式 C 语言大神的进阶之路

C语言可以说是一种"古老"的编程语言&#xff0c;也是目前嵌入式中主流的编程语言&#xff0c;没有C语言就没有今天的各种嵌入式系统以及操作系统等等。 C语言虽然说是编程开发的基础&#xff0c;那到底你掌握到了什么程度呢&#xff1f; 下面我们一起看看C语言熟练到…

第十三节TypeScript 元组

1、简介 我们知道数组中元素的数据类型一般都是相同的&#xff08;any[]类型的数组可以不同&#xff09;&#xff0c;如果存储的元素类型不同&#xff0c;则需要使用元组。 元组中允许存储不同类型的元素&#xff0c;元组可以作为参数传递给函数。2、创建元组的语法格式&#x…

python:改进型鳟海鞘算法(SSALEO)求解23个基本函数

一、改进型鳟海鞘算法SSALEO 改进型鳟海鞘算法&#xff08;SSALEO&#xff09;由Mohammed Qaraad等人于2022年提出。 参考文献&#xff1a;M. Qaraad, S. Amjad, N. K. Hussein, S. Mirjalili, N. B. Halima and M. A. Elhosseini, "Comparing SSALEO as a Scalable Larg…

阻抗控制中的弹簧与阻尼影响分析

阻抗控制是一种机器人控制方法&#xff0c;通过调整机器人的阻抗来实现对机器人的精准控制。在阻抗控制中&#xff0c;弹簧和阻尼是两个重要的参数&#xff0c;它们对机器人的性能和稳定性有很大的影响。 弹簧代表机器人的刚度和弹性&#xff0c;而阻尼代表机器人的阻尼特性&a…

rabbitmq的事务实现、消费者的事务实现

RabbitMQ提供了事务机制&#xff0c;可以确保消息在发送和确认过程中的一致性。使用事务机制可以将一系列的消息操作&#xff08;发送、确认、回滚&#xff09;作为一个原子操作&#xff0c;要么全部执行成功&#xff0c;要么全部回滚。 下面是使用RabbitMQ事务的一般步骤&…