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

LEETCODE-DAY27


title: LEETCODE-DAY27
date: 2024-03-18 12:55:19
tags:

今日内容:39. 组合总和、40.组合总和II、131.分割回文串

T1

class Solution:def backtracking(self,candidates,target,nums,res):if sum(nums)==target:res.append(nums.copy())returnfor i in range(len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,nums,res)nums.pop()def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:res=[]self.backtracking(candidates,target,[],res)return res

超出时间限制

class Solution:def backtracking(self,candidates,target,nums,res):if sum(nums)==target:res.append(nums.copy())returnif sum(nums)> target:returnfor i in range(len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,nums,res)nums.pop()def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:res=[]self.backtracking(candidates,target,[],res)return res

andidates =
[2,3,6,7]
target =
7
输出
[[2,2,3],[2,3,2],[3,2,2],[7]]
预期结果
[[2,2,3],[7]]

有重复

暴力去重

class Solution:def backtracking(self,candidates,target,nums,res):if sum(nums)==target:if sorted(nums.copy()) not in res:res.append(sorted(nums.copy()))returnif sum(nums)> target:returnfor i in range(len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,nums,res)nums.pop()def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:res=[]self.backtracking(candidates,target,[],res)return res

更便捷的方法:用index


T2

class Solution:def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif index==len(candidates):returnif sum(nums)==target:if sorted(nums.copy()) not in res:res.append(sorted(nums.copy()))returnfor i in range(index,len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,index+1,nums,res)nums.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:res=[]self.backtracking(candidates,target,0,[],res)return res

candidates =
[2,5,2,1,2]
target =
5
输出
[[1,2,2],[1,1,1,2],[5]]
预期结果
[[1,2,2],[5]]

输入
candidates =
[10,1,2,7,6,1,5]
target =
8
输出
[[1,1,6],[1,1,1,5],[1,1,1,1,2,2],[1,2,5],[1,7],[1,1,2,2,2],[2,6]]
预期结果
[[1,1,6],[1,2,5],[1,7],[2,6]]

class Solution:def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif sum(nums)==target:if sorted(nums.copy()) not in res:res.append(sorted(nums.copy()))returnfor i in range(index,len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,i+1,nums,res)nums.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:res=[]self.backtracking(candidates,target,0,[],res)return res

回溯时参数应为i+1
此时超出时间限制27/176

class Solution:def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif sum(nums)==target:if sorted(nums.copy()) not in res:res.append(sorted(nums.copy()))returnfor i in range(index,len(candidates)):nums.append(candidates[i])self.backtracking(candidates,target,i+1,nums,res)nums.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:if sum(candidates)<target:return []res=[]self.backtracking(candidates,target,0,[],res)return res

超出时间限制172/176

直接对candidates排序,这样可以减少排序的次数

class Solution:def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif sum(nums)==target:res.append(nums.copy())returnfor i in range(index,len(candidates)):if candidates[i]==candidates[i-1]:continuenums.append(candidates[i])self.backtracking(candidates,target,i+1,nums,res)nums.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:if sum(candidates)<target:return []res=[]candidates.sort()self.backtracking(candidates,target,0,[],res)return res

candidates =
[2,5,2,1,2]
target =
5
输出
[[5]]
预期结果
[[1,2,2],[5]]

 def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif sum(nums)==target:res.append(nums.copy())returnfor i in range(index,len(candidates)):#if candidates[i]==candidates[i-1]:#continuenums.append(candidates[i])self.backtracking(candidates,target,i+1,nums,res)nums.pop()

输入
candidates =
[10,1,2,7,6,1,5]
target =
8
输出
[[1,1,6],[1,2,5],[1,7],[1,2,5],[1,7],[2,6]]
预期结果
[[1,1,6],[1,2,5],[1,7],[2,6]]

问题在于i=index时多去重了

class Solution:def backtracking(self,candidates,target,index,nums,res):if sum(nums)> target:returnif sum(nums)==target:res.append(nums.copy())returnfor i in range(index,len(candidates)):if i>index and candidates[i]==candidates[i-1]:continuenums.append(candidates[i])self.backtracking(candidates,target,i+1,nums,res)nums.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:if sum(candidates)<target:return []res=[]candidates.sort()self.backtracking(candidates,target,0,[],res)return res

AC


T3

class Solution:def isPalindrome(self,s):i=0j=len(s)-1while i<=j:if s[i] !=s[j]:return Falsei+=1j-=1return Truedef backtracking(self,s,index,path,res):if index==len(s):res.append(path)returnfor i in range(index,len(s)):if self.isPalindrome(s[index:i]):path+=s[index:i]self.backtracking(s,i,path,res)path=path[:-(i-index)]def partition(self, s: str) -> List[List[str]]:res=[]self.backtracking(s,0,[],res)return res

RecursionError: maximum recursion depth exceeded in comparison
^^^^^^^^^^^^^^^^^^^
for i in range(index,len(s)):
Line 16 in backtracking (Solution.py)

for i in range(index,len(s)):if self.isPalindrome(s[index:i]):path.append(s[index:i])self.backtracking(s,i,path,res)path.pop()else:return

仍错误

class Solution:def isPalindrome(self,s):i=0j=len(s)-1while i<=j:if s[i] !=s[j]:return Falsei+=1j-=1return Truedef backtracking(self,s,index,path,res):if index==len(s):res.append(path)returnfor i in range(index,len(s)):if self.isPalindrome(s[index:i]):path.append(s[index:i])else:continueself.backtracking(s,i+1,path,res)def partition(self, s: str) -> List[List[str]]:res=[]self.backtracking(s,0,[],res)return res

输入
s =
“a”
输出
[[“”]]
预期结果
[[“a”]]

输入
s =
“aab”
输出
[[“”,“”,“”,“a”,“a”,“”,“aa”],[“”,“”,“”,“a”,“a”,“”,“aa”],[“”,“”,“”,“a”,“a”,“”,“aa”],[“”,“”,“”,“a”,“a”,“”,“aa”]]
预期结果
[[“a”,“a”,“b”],[“aa”,“b”]]

def backtracking(self,s,index,path,res):if index==len(s):res.append(path.copy())returnfor i in range(index,len(s)):if self.isPalindrome(s[index:i]):path.append(s[index:i])self.backtracking(s,i+1,path,res)path.pop()        

输入
s =
“aab”
输出
[[“”,“”,“”],[“”,“a”],[“a”,“”],[“aa”]]
预期结果
[[“a”,“a”,“b”],[“aa”,“b”]]

错误在于出现为空的情况即i=index
故i应改为i+1,这并不会造成下标溢出,因为s[index,len(s)]正好取到s最后一个元素

class Solution:def isPalindrome(self,s):i=0j=len(s)-1while i<=j:if s[i] !=s[j]:return Falsei+=1j-=1return Truedef backtracking(self,s,index,path,res):if index==len(s):res.append(path.copy())returnfor i in range(index,len(s)):if self.isPalindrome(s[index:i+1]):path.append(s[index:i+1])self.backtracking(s,i+1,path,res)path.pop()        def partition(self, s: str) -> List[List[str]]:res=[]self.backtracking(s,0,[],res)return res

AC


http://www.lryc.cn/news/2414098.html

相关文章:

  • 创建个人网站(一) 如何申请一个网站
  • 电脑蓝屏显示0x000000f4怎么办的四个解决方法
  • Class类的newInstance方法抛出InstantiationException异常
  • js中prompt()的用法
  • C语言socket编程----实现TCP通信
  • 【C语言】常见面笔试题(10道)
  • 全景图像拼接
  • 关于led电源设计
  • c++中静态函数与动态函数的区别
  • 深度学习(四)卷积神经网络-卷积神经网络(3) -Andrew Ng
  • sockaddr和sockaddr_in的区别
  • printf输出格式
  • 167.Web前端网页制作 大气的UI设计平台网页实例 大学生期末大作业
  • Cache(三):cache的常见名词与Cache一致性问题简介
  • mysql安装程序错误代码2503,Win10安装程序错误2502/2503的解决方法
  • CompareNoCase与Compare
  • matlab函数imfilter和 opencv中filter2D函数的对应关系
  • Windows 开机启动 | 启动项管理
  • 在IOS中使用AVPlayer去播放在线音频文件,并设置音量
  • 有道翻译接口逆向_python有道翻译api(2)
  • JSP基于web2.0的超市商品管理系统3sq6z程序+源码+数据库+调试部署+开发环境
  • 【学习资源】C#初学者学习资源推荐
  • Rosetta Tutorial 5/7/9 翻译 | 主要为 Scoring Packer Tutorial 部分
  • MPEG TS流简介
  • 云计算比赛私有云题目
  • git创建分支,提交分支,删除分支的开发流程
  • Spring 自动定时任务配置
  • 【JavaScript】用于模拟 word 生成网页页面的插件
  • DuplicateHandle的应用
  • 逆向破解crackme简要分析