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

力扣hot100_回溯(2)_python版本

一、39. 组合总和(中等)

在这里插入图片描述

  • 代码:
class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        ans = []
        path = []

        def dfs(i: int, left: int) -> None:
            if left == 0:
                # 找到一个合法组合
                ans.append(path.copy())
                return

            if i == len(candidates) or left < 0:
                return

            # 不选
            dfs(i + 1, left)

            # 选
            path.append(candidates[i])
            dfs(i, left - candidates[i])
            path.pop()  # 恢复现场

        dfs(0, target)
        return ans

二、22. 括号生成

在这里插入图片描述

  • 代码
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        m = n * 2  # 括号长度
        ans = []
        path = [''] * m  # 所有括号长度都是一样的 m
        # i = 目前填了多少个括号
        # open = 左括号个数,i-open = 右括号个数
        def dfs(i: int, open: int) -> None:
            if i == m:  # 括号构造完毕
                ans.append(''.join(path))  # 加入答案
                return
            if open < n:  # 可以填左括号
                path[i] = '('  # 直接覆盖
                dfs(i + 1, open + 1)  # 多了一个左括号
            if i - open < open:  # 可以填右括号
                path[i] = ')'  # 直接覆盖
                dfs(i + 1, open)
        dfs(0, 0)
        return ans

三、79. 单词搜索(中等)

在这里插入图片描述

  • 代码
class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        m, n = len(board), len(board[0])
        def dfs(i: int, j: int, k: int) -> bool:
            if board[i][j] != word[k]:  # 匹配失败
                return False
            if k == len(word) - 1:  # 匹配成功!
                return True
            board[i][j] = ''  # 标记访问过
            for x, y in (i, j - 1), (i, j + 1), (i - 1, j), (i + 1, j):  # 相邻格子
                if 0 <= x < m and 0 <= y < n and dfs(x, y, k + 1):
                    return True  # 搜到了!
            board[i][j] = word[k]  # 恢复现场
            return False  # 没搜到
        return any(dfs(i, j, 0) for i in range(m) for j in range(n))
http://www.dtcms.com/a/119746.html

相关文章:

  • 升级 SAP S/4 HANA 之 EWM 攻略
  • aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
  • 系统配置篇,修改sem值
  • Docker 全面解析:从基础概念到实际应用
  • ARP攻击 DAI动态ARP检测学习笔记(超详细)
  • python网络爬虫
  • 一种反激变换器的设计思路(01)
  • golang-defer延迟机制
  • Spring Boot 邮件发送配置遇到的坑:解决 JavaMailSenderImpl 未找到的错误
  • 力扣第444场周赛
  • springMVC-拦截器详解
  • 算法精讲【整数二分】(实战教学)
  • Python语言的需求分析
  • 快速掌握Phoenix:简单易懂的搭建与配置指南
  • 2025 XYCTF Pwn-wp(含附件)
  • 【比赛编排软件的设计与实现】
  • Spring Boot默认注册的转换器列表及其功能说明。这些转换器使得控制器方法可以直接接收Integer、Long、Date等类型参数,无需手动实现转换
  • 重回全面发展亲自操刀
  • Redis哨兵模式下执行sentinel failover mymaster命令可能导致什么风险,如何避免
  • 1021 Deepest Root
  • 气象水文研究利器WRF-Hydro 耦合模式:从流域建模到洪水预报指南
  • MySQL的子查询
  • 网络安全小知识课堂(五)
  • Linux 进程 | 概念 / 特征 / 状态 / 优先级 / 空间
  • 【leetcode 100】贪心Java版本
  • leetcode6.Z字形变换
  • Python星球日记 - 第16天:爬虫基础(仅学习使用)
  • uni-app ucharts自定义换行tooltips
  • 基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南
  • consul服务注册与发现(go)-学习笔记