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. 【内核】深入分析内核panic(三)--内核错误处理流程

    1 内核错误处理方式 当内核出现致命错误时,只要cpu还能正常运行,那么最重要的就是向用户输出详细的错误信息,以及保存问题出现时的错误现场.以上致命错误可包含以下两种类型: (1)硬件能检测到的错误, ...

  2. js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理

    https://www.cnblogs.com/mahao1993/p/13491430.html

  3. vue+elementUI+WebSocket接收后台实时消息推送

    vue+elementUI+WebSocket接收后台实时消息推送 https://blog.csdn.net/weixin_40888956/article/details/105971432?ut ...

  4. 第七届蓝桥杯大赛个人赛省赛(软件类)B组

    3.凑算式     B      DEFA + --- + ------- = 10     C      GHI     (如果显示有问题,可以参见[图1.jpg])   这个算式中A~I代表1~9 ...

  5. Liunx常用操作(七)-文件上传下载方法

    如下介绍了几个比较方便的liunx软件的文件维护方法 一.SZ,RZ liunx服务器上安装 通过apt来安装z.sz:安装后直接上传下载文件 apt-get install lrzsz 用法: # ...

  6. python常见面试题讲解(九)字符个数统计

    题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里.不在范围内的不作统计.注意是不同的字符 输入描述: 输入N个字符,字符在 ...

  7. mybatis plus 中增删改查及Wrapper的使用

    本文为博主原创,未经允许不得转载: mybatis plus 通过封装  baseMapper 以及 ServiceImpl ,实现对数据库的增删改查操作,baseMapper 是我们通常所说的 da ...

  8. spring--Bean的作用域及应用场景

    这六种Spring Bean的作用域适用于不同的应用场景: Singleton: 在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在.无论我们是否在配置文件中显式定义,所有的S ...

  9. 【面试题精讲】JVM中有哪些垃圾收集器

    有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java虚拟机(JVM)中,有以下几种常见的垃圾收 ...

  10. [转帖]java -D参数设置系统属性无效问题及解决

    https://www.jb51.net/article/271236.htm   这篇文章主要介绍了java -D参数设置系统属性无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助.如有错误 ...