部分回溯法题解

在这里插入图片描述


部分回溯法题解

  • 一、22. 括号生成
  • 二、39. 组合总和

一、22. 括号生成


数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:
输入:n = 1
输出:[“()”]

如果是左括号直接添加
如果是右括号不能超过已经添加的左括号个数
所以:左括号的长度要比右括号的长度大,才可以
思路:采用深度优先加回溯

class S22:def generate(self, n):res = []# 代表左右两边的括号剩余个数,一开始都有n个def dfs(left, right, path):  # path:生产括号的路径if left == 0 and r == 0:res.append(path)return# 特殊情况:如果用到的右括号已经超过用到的左括号了if right < left:returnif left > 0:dfs(left - 1, right, path + "(")if right > 0:dfs(left, right - 1, path + ")")dfs(n, n, "")return res

二、39. 组合总和

中等
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:
输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例 2:
输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:
输入: candidates = [2], target = 1
输出: []

思路:使用回溯法

class Solution39:def combination(self, canditates, target):if not canditates:return []# 找到的1个结果存放在path,总的结果存放到res中def dfs(res, path, target, index):if target == 0:res.append(path[:])for i in range(index, len(canditates)):if target >= canditates[i]:# 如果目标值大于当前值,加入到path中path.append(canditates[i])dfs(res, path, target - canditates[i], i)  # 为什么是i,不是i+1:原因是数组中的元素可以重复取# 重写设置现场path.pop()res = []dfs(res, [], target, 0)return res

在这里插入图片描述

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

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

相关文章

13180自考《操作系统》考点总结

第一章 操作系统概论 考点1 操作系统的定义、特征、功能 定义&#xff1a;操作系统是计算机系统中的一个系统软件&#xff0c;它是这样一些程序模块的集合&#xff1a;它们能有效地组织和管理计算机系统中的硬件及软件资源&#xff0c;合理地组织计算机工作流程&#xff0c;控…

四分位距IQR_ interquartile range

四分位距IQR_ interquartile range 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义2 如何计算IQR参考&#xff1a; 1 IQR&#xff08;Interquartile Range&#xff09;四分位距的含义 官方定义&#xff1a; 四分位距&#xff08;interquartile range, IQR&a…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意&#xff1a;以下4个内存函数在…

什么是 Sepolia 测试网以及如何从 Faucet 获取 Sepolia ETH

如何通过水龙头领取 Sepolia 测试网 ETH 代币 Sepolia 测试网需要 Sepolia ETH 代币来测试即将推出的 dApp&#xff0c;然后再在以太坊主网上线。您可以从 Alchemy、QuickNode 和 Infura 水龙头领取 Sepolia 测试网 ETH。 要点 您可以从官方水龙头和其他一些独立水龙头获取 S…

面试题:链表相交

链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 这个题目有2个思路&#xff0c;我先说容易想到的思路 对齐链表…

有人总结了浅色系可视化大屏优点,我要是小白,我就信了。

浅色系适合在电脑上展示&#xff0c;不适合在大屏展示&#xff0c;有人总结了浅色系大屏优点&#xff0c;我捡要点说下。 浅色系可视化大屏幕在数据可视化中具有多个优点&#xff1a; 首先&#xff0c;浅色系色彩明亮清新&#xff0c;能够提升人们的视觉感受和心情&#xff0c…

[Flink04] Flink部署实践

Flink部署支持三种模式&#xff1a;本地部署、Standalone部署、Flink on Yarn部署。 独立&#xff08;Standalone&#xff09;模式由Flink自身提供资源&#xff0c;无需其他框架&#xff0c;这种方式降低了和其他第三方资源框架的耦合性&#xff0c;独立性非常强。但Flink 是大…

遇到问题(二) 中文乱码

例如这样&#xff1a; 原本是这样&#xff1a; 解决方法&#xff1a;点击扳手工具设置——Editor——Encoding——选chinese GB2312&#xff08;有的是UTF-8&#xff09;

同学在外包干了两年的点点点,24岁人就快废了

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

在ubuntu中制作ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在ubuntu22.04中制作ubuntu22.04的U盘启动盘 一、下载ubuntu22.04的iso文件 访问ubuntu官网https://ubuntu.com自行下载ubuntu官网 二、制作U盘启动盘 打开系统自带软件Startup Disk Creator 软件会自动检测iso文件和U盘 点击Make Startup Disk…

Java 线程通信模型小案例

Java 线程通信模型小案例 package com.zhong.thread.usethread;import java.util.ArrayList; import java.util.List;/*** ClassName : CookAndFood* Description : 锁的应用厨师和包子问题* Author : zhx* Date: 2024-02-19 15:43*/ public class CookAndFood {public static …

一分钟学会如何查看Python内置函数的用法及其源码

在用Python进行各种分析的时候&#xff0c;我们会用到各种各样的函数&#xff0c;比如&#xff0c;我们用SQL时&#xff0c;经常使用join、max等各种函数&#xff0c;那么想看Python是否有这个函数&#xff0c;这个时候可能大部分人会百度&#xff0c;那么如何不使用百度&#…