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. 【每日一题】31.「土」秘法地震 (二维前缀和 / DP)

    补题链接:Here 题意就是要找每一个 \(k * k\) 的小正方形里至少有一个1的数量 显然我们可以通过二维前缀和处理出(1, 1) 到 (n, m) 的数量 然后通过枚举处理出答案,具体思想是容 ...

  2. 打破 Serverless 落地边界,阿里云 SAE 发布 5 大新特性

    微服务场景,开源自建真的最快最省最稳的?复杂性真的会成为 Kubernetes 的"致命伤"吗?企业应用容器化,一定得过 K8s 这座"独木桥"吗?Server ...

  3. S3C2440移植uboot之新建单板_时钟_SDRAM_串口

    上一节S3C2440移植uboot之启动过程概述我们我们分析了uboot启动流程,这节将开始新建一块单板支持S3C2440. 目录 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: 1.2 ...

  4. 【Qt】开源一键代码开光神器,一行代码给你的项目施加祝福,减少Bug

    年底啦,没什么项目,想摸鱼划水没见到什么好玩的东西,看到有人分享这个,直接做个库来玩下,之后说不定会嵌到公司的项目里面去.... 效果如下,佛光普照! 输入也只需要一行命令 magic_spells: ...

  5. Java应用架构演变史

    垂直应用架构 也叫单体架构.以 MVC 的垂直架构举例,MVC 架构通常分为 3 层,展示层.控制层.模型层.通常基于 MVC 架构开发的应用代码会打成一个 war 包,部署在 Tomcat 等 We ...

  6. Mysql有布尔(BOOL)类型吗

    转载请注明出处: 在MySQL中,没有专门的Boolean数据类型.相反,MySQL中使用TINYINT(1)来代表布尔类型,其中1表示真(True),0表示假(False).在MySQL中,TINY ...

  7. 如果诸葛亮会编程,用Java写出师表...

    继上一篇 "如果诸葛亮用C#写出师表..."后,站长想自己的第一语言是Java,虽然平时工作上用的不多,也用Java实现一遍吧,改改就是了,无非就是: C#的Console.Wri ...

  8. 260. 只出现一次的数字 III

    1.题目介绍 2.题解 2.1 快排+遍历 思路 同本系列前几题一样 代码 class Solution { public: std::vector<int> singleNumber(s ...

  9. 第二届福州大学至诚学院网络安全大赛G0DCTF Misc WP

    MISC baby_misc 1.题目信息 key文件夹: 还有一张图片 2.解题方法 观察key文件夹里的每个文件信息,发现并无什么有用的,甚至有的为空... 看到文件名称的数字而且还给了图片,可以 ...

  10. JavaScript : 获取文件名后缀

               /** 获取文件后缀               *               * indexOf 和 lastIndexOf 都是索引文件            indexO ...