131:分割回文串

链接:131. 分割回文串 - 力扣(LeetCode)

for 遍历字符串

递归切割,切割到字符串尾,单次结束

 1 class Solution:
2 def partition(self, s: str) -> List[List[str]]:
3 if(not s): return []
4 re=[]
5 self.backtracking(s,[],re,0)
6 return re
7 def backtracking(self,s,path,re,index):
8 if(index==len(s)):
9 re.append(path[:])
10 return
11 for i in range(index,len(s)):
12 strs=s[index:i+1]
13 if(self.bool_hui(strs)):
14 path.append(strs)
15 self.backtracking(s,path,re,i+1)
16 path.pop()
17 else: continue
18 def bool_hui(self,s):
19 if not s: return False
20 lens=len(s)
21 for i in range(lens//2):
22 if(s[i]!=s[lens-i-1]): return False
23 return True

partition

优化判断字符串是否为回文串:

s[index:i+1]==s[index:i+1][::-1]

all函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False

all(s[i] == s[len(s) - 1 - i] for i in range(len(s) // 2))

93:复原IP地址

链接:93. 复原 IP 地址 - 力扣(LeetCode)

结束条件:每一段IP中.的数量为4时,判断IP长度是否比s长度大4

 1 class Solution:
2 def restoreIpAddresses(self, s: str) -> List[str]:
3 if(not s): return []
4 re=[]
5 self.backtracking(s,"",re,0)
6 return re
7 def backtracking(self,s,path,re,index):
8 if(path.count(".")==4):
9 if(len(path)==len(s)+4):
10 re.append(path[:len(path)-1])
11 return
12 for i in range(index,len(s)):
13 strIp=s[index:i+1]
14 if(not self.isvalue(strIp)): return
15 self.backtracking(s,path+strIp+'.',re,i+1)
16 def isvalue(self,strs):
17 if(int(strs)>255): return False
18 if(strs[0]=='0' and len(strs)>1): return False
19 return True
20
21
22
23

restoreIpAddresses

78:子集

链接:78. 子集 - 力扣(LeetCode)

结束条件:index=len(nums),path每append一次,都要放入结果集中,不能再结束时再放

 1 class Solution:
2 def subsets(self, nums: List[int]) -> List[List[int]]:
3 if(not nums): return nums
4 re=[[]]
5 self.backtracking(re,[],nums,0)
6 return re
7 def backtracking(self,re,path,nums,index):
8 if(index==len(nums)):
9 return
10 for i in range(index,len(nums)):
11 path.append(nums[i])
12 self.backtracking(re,path,nums,i+1)
13 re.append(path[:])
14 path.pop()

subsets

90:子集II

链接:90. 子集 II - 力扣(LeetCode)

数组先排序,排序后,如果i大于index,并且和前一个相等,跳过

 1 class Solution:
2 def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
3 if(not nums): return nums
4 re=[[]]
5 nums.sort()
6 self.backtracking(nums,re,[],0)
7 return re
8 def backtracking(self,nums,re,path,index):
9 if(index==len(nums)): return
10 for i in range(index,len(nums)):
11 if(i>index and nums[i]==nums[i-1]): continue
12 path.append(nums[i])
13 self.backtracking(nums,re,path,i+1)
14 re.append(path[:])
15 path.pop()

subsetsWithDup

491:非递减子集

链接:491. 非递减子序列 - 力扣(LeetCode)

em....再来一个试试

 1 class Solution:
2 def findSubsequences(self, nums: List[int]) -> List[List[int]]:
3 if(len(nums)<2): return []
4 re=[]
5 self.backtracking(nums,[],re,0)
6 return re
7 def backtracking(self,nums,path,re,index):
8 #长度为大于2,就放入结果集中
9 if(len(path)>1): re.append(path[:])
10 #记录当前层哪些元素被用过
11 uset=set()
12 for i in range(index,len(nums)):
13 if((path and path[-1]>nums[i]) or nums[i] in uset): continue
14 uset.add(nums[i])
15 path.append(nums[i])
16 self.backtracking(nums,path,re,i+1)
17 path.pop()

findSubsequences

46:全排列

链接:46. 全排列 - 力扣(LeetCode)

for从头开始

 1 class Solution:
2 def permute(self, nums: List[int]) -> List[List[int]]:
3 if(not nums): return []
4 re=[]
5 self.backtracking(nums,[],re)
6 return re
7 def backtracking(self,nums,path,re):
8 if(len(path)==len(nums)):
9 re.append(path[:])
10 return
11 for i in range(len(nums)):
12 if(nums[i] in path): continue
13 path.append(nums[i])
14 self.backtracking(nums,path,re)
15 path.pop()

permute

47:全排列II

链接:47. 全排列 II - 力扣(LeetCode)

每次递归传入的数组,需要将上一次path添加的元素删除

 1 class Solution:
2 def permuteUnique(self, nums: List[int]) -> List[List[int]]:
3 if(not nums): return []
4 re=[]
5 self.backtracking(nums,[],re,len(nums))
6 return re
7 def backtracking(self,nums,path,re,lens):
8 if(len(path)==lens):
9 re.append(path[:])
10 return
11 uset=set()
12 for i in range(len(nums)):
13 if(nums[i] in uset): continue
14 uset.add(nums[i])
15 path.append(nums[i])
16 self.backtracking(nums[:i]+nums[i+1:],path,re,lens)
17 path.pop()

permuteUnique

==============================================================================================

头痛痛~~想请个假真的是难死,俩领导相互踢皮球,MMD,在自己能力范围内最大限度的为难别人的人都该死,天煞的!!!!再不回消息半夜还给你俩打电话

Leetcode刷题第六天-回溯的更多相关文章

  1. LeetCode刷题191203 --回溯算法

    虽然不是每天都刷,但还是不想改标题,(手动狗头 题目及解法来自于力扣(LeetCode),传送门. 算法(78): 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明: ...

  2. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

  3. LeetCode刷题 DFS+回溯

    一.DFS介绍 二.LeetCode 实战 LC 17. 电话号码的字母组合 解法思路 解题步骤 代码 LC 79. 单词搜索 解题思路 解题步骤 代码 LC 46. 全排列 解题思路一 解题步骤 代 ...

  4. LeetCode刷题笔记-回溯法-括号生成

    题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "( ...

  5. LeetCode刷题笔记-回溯法-组合总和问题

    题目描述: <组合总和问题>给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. cand ...

  6. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  7. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  8. LeetCode刷题的一点个人建议和心得

    目录 1.    为什么我们要刷LeetCode? 2.    LeetCode的现状和问题 3.    本文的初衷 4.    LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...

  9. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

  10. leetcode 刷题进展

    最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多  前200的吃透了 足以应付非算法岗 ...

随机推荐

  1. 每天学五分钟 Liunx 0101 | 服务篇:创建进程

    创建子进程 上一节说过创建子进程的三种方式: 1. fork 复制进程:fork 会复制当前进程的副本,产生一个新的子进程,父子进程是完全独立的两个进程,他们掌握的资源(环境变量和普通变量)是一样的. ...

  2. FGC频繁导致CPU 飙升定位及JVM配置优化总结

    本文为博主原创,未经允许不得转载: 目录: 1. 定位消耗cpu 的服务进程和线程 2. 定位FGC 的原因 3. 定位jvm 参数是否导致FGC 4. 调试最优解的 jvm 配置 描述:项目中存在一 ...

  3. Feign源码解析7:nacos loadbalancer不支持静态ip的负载均衡

    背景 在feign中,一般是通过eureka.nacos等获取服务实例,但有时候调用一些服务时,人家给的是ip或域名,我们这时候还能用Feign这一套吗? 可以的. 有两种方式,一种是直接指定url: ...

  4. 基于python开发的口罩供需平台

    基于python开发的口罩供需平台 预览地址:https://i.mypython.me 开发语言:python/django 意见反馈:net936艾特163.com

  5. web - 解决 formdata 打印空对象

    获取单个值可以使用formData对象.get();而直接打印是看不到的.因为外界访问不到,你使用append方法后,对应的键值对就已经添加到表单里面了,你在控制台看到的是FormData原型,存储的 ...

  6. [转帖]Nginx - 根据IP分配不同的访问后端

    https://www.cnblogs.com/hukey/p/11868017.html 1. 需求分析 为了在线上环境提供测试分支,规定将某IP转发到测试程序地址.如果是 ngx 直接对外,采用 ...

  7. [转帖]nginx配置默认首页(index.html index.htm)全流程(包含遇到问题的解决)

    https://www.cnblogs.com/tujietg/p/10753041.html#:~:text=%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9 ...

  8. [转帖]Jmeter连接InfluxDB2.0.4

    Jmeter连接InfluxDB2.0.4 问题描述:在用Jmeter+InfluxDB构建监控时,因为docker构建的InfluxDB的版本是2.0.4,按照网上的教程进行后端监听器的填写,但是一 ...

  9. [转帖]MySQL InnoDB存储引擎大观

      https://baijiahao.baidu.com/s?id=1709263187856706948&wfr=spider&for=pc MySQL InnoDB 引擎现在广为 ...

  10. [转帖]Redis各版本特性汇总

    redis4 redis5 redis6 redis6.2 重大特性 1.模块系统 2.PSYNC2 3.LFU淘汰策略 4.混合RDB-AOF持久化 5.LAZY FREE延迟释放 6.MEMORY ...