Leetcode刷题第八天-回溯

这篇具有很好参考价值的文章主要介绍了Leetcode刷题第八天-回溯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

22:括号生成

链接:22. 括号生成 - 力扣(LeetCode)

括号是一对,所以每一次递归结束条件是字符串长度=2*n

有效括号判断:'('个数==')'个数时,当前必须是'(','('个数==n时,必须是')',其他情况当前位置遍历两边,既可以是'('又可以是')'

Leetcode刷题第八天-回溯Leetcode刷题第八天-回溯
 1 class Solution:
 2     def generateParenthesis(self, n: int) -> List[str]:
 3         if not n :  return []
 4         re=[]
 5         
 6         self.backtracking(2*n,re,"",0)
 7         return re
 8     def backtracking(self,n,re,path,index):
 9         if(len(path)==n):   
10             re.append(path)
11             return
12         for i in range(index,n):
13             num=self.isValid(path,i,n)
14             if(num):    self.backtracking(n,re,path+num,i+1)
15             else:
16                 self.backtracking(n,re,path+'(',i+1)
17                 self.backtracking(n,re,path+')',i+1)
18 
19     def isValid(self,path,index,n):
20         count1,count2=path.count('('),path.count(')')
21         if(count1==count2 ):   return '('
22         if(count1==n//2):   return ')'
23         return 0
generateParenthesis

89:格雷编码

链接:89. 格雷编码 - 力扣(LeetCode)

天哪噜,谁敢信这么个玩意做了一下午😢想复杂了,原本是想预设置一个'0'*n的字符串,然后挨个回溯,直到前一个结果只有一个字符和当前结果对应位置的字符不同,但是,我忘了“第一个 和 最后一个 整数的二进制表示 恰好一位不同”这么个条件😓

n是n-1结果加上n-1结果倒序挨个加上2^n

Leetcode刷题第八天-回溯Leetcode刷题第八天-回溯
 1 class Solution:
 2     def grayCode(self, n: int) -> List[int]:
 3         if(not n ): return []
 4         re=[0]
 5         self.backtracking(re,n-1)
 6         return re
 7     def backtracking(self,re,n):
 8         if(n==-1):   return 
 9         self.backtracking(re,n-1)
10         lens=len(re)-1
11         for i in range(lens,-1,-1):
12             num=re[i]+2**n
13             re.append(num)
grayCode

timeout版本:

Leetcode刷题第八天-回溯Leetcode刷题第八天-回溯
 1 class Solution:
 2     def grayCode(self, n: int) -> List[int]:
 3         if(not n ): return []
 4         num='0'*n
 5         re=[num]
 6         self.backtracking(re,num,n,0)
 7         re=[self.get_result(i) for i in re]
 8         return re
 9     def backtracking(self,re,num,n,index):
10         if(index==n):   index=0
11         if(len(re)==2**n):  
12             if(re[len(re)-1].count("1")==1):   return True
13             else:   return False
14         tmp=num
15         for i in range(index,n):
16             if(num[i]=='0'):
17                 num=num[:i]+'1'+num[i+1:]
18             else:
19                 num=num[:i]+'0'+num[i+1:]
20             if(num[::-1] in re):  
21                 num=tmp
22                 continue
23             re.append(num[::-1])
24             if(self.backtracking(re,num,n,i+1)):    return True 
25             else:
26                 num=tmp
27                 re.pop()
28         return False
29     def get_result(self,num):
30         re=0
31         for i in range(len(num)-1,-1,-1):
32             re+=2**(len(num)-1-i)*int(num[i])
33         return re
timeout版本

😢😢😢😢😢😢😢😢😢😢妈耶,今天一天才做两道,卡树杈子上了😢😢😢😢😢😢😢😢😢😢

下班下班,周末愉快

Leetcode刷题第八天-回溯

 文章来源地址https://www.toymoban.com/news/detail-824984.html

到了这里,关于Leetcode刷题第八天-回溯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录刷题第6天|哈希表 LeetCode242、LeetCode349、LeetCode202、LeetCode1

    1、LeetCode242 有效的字母异位词 题目链接:242、有效的字母异位词 用哈希表,record[s[i]-\\\'a\\\']++,record[t[i]-\\\'a\\\']--,最后判断record里是否有元素不为0。 2、LeetCode349、两个数组的交集 题目链接:349、两个数组的交集 题目如果没有限制数值的大小,就无法使用数组来做哈希表。如果哈

    2024年02月06日
    浏览(60)
  • 代码随想录刷题第55天|Leetcode392判断子序列、Leetcode115不同的子序列

    1、Leetcode392判断子序列 题目链接:392判断子序列 本题与1143最长公共子序列 有一点不一样,最长公共子序列求 两个字符串 的最长公共子序列的长度,本题判断s是否为t的子序列。即t的长度是大于等于s的。 1、确定dp数组及下标含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以

    2024年02月16日
    浏览(45)
  • LeetCode刷题13:回溯+剪枝解决216.组合总和 III

    找出所有相加之和为  n   的  k   个数的组合,且满足下列条件: 只使用数字1到9 每个数字  最多使用一次   返回  所有可能的有效组合的列表  。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他

    2024年02月02日
    浏览(44)
  • 【leetcode刷题之路】剑指Offer(3)——搜索与回溯算法

    7 搜索与回溯算法 7.1 【BFS】剑指 Offer 32 - I - 从上到下打印二叉树 https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/   这里借助队列来实现广度优先遍历,由于需要访问每一层的节点,而且这一层访问才可以访问下一层,所以可以考虑队列的先进先出,先把每一层的节

    2024年02月13日
    浏览(58)
  • 代码随想录刷题第48天|LeetCode198打家劫舍、LeetCode213打家劫舍II、LeetCode337打家劫舍III

    1、LeetCode198打家劫舍 题目链接:198、打家劫舍 1、dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 。 2、递推公式: 如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ; 如果不偷第i房间,那么dp[i] = dp[i - 1]; 然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1

    2024年02月08日
    浏览(62)
  • Go学习第八天

    签名 验签

    2024年02月13日
    浏览(38)
  • 学习Spring的第八天

     先对自定义类使用@MyComponet的注解,在设置这个@MyComponet的的属性(一个 MyComponentBeanFactoryPostProcessor.java如下:   还要在主配置文件里配置

    2024年01月20日
    浏览(42)
  • 每日后端面试5题 第八天

    1.UDP无连接,速度快,安全性低,适合高速传输、实时广播通信等。 2.TCP面向连接,速度慢,安全性高,适合传输质量要求高、大文件等的传输,比如邮件发送等。 (还有:TCP只能是一对一的,UDP支持一对一、一对多、多对一) (还有:TCP首部开销有20个字节;UDP分组首部开

    2024年02月11日
    浏览(44)
  • MFC第八天 基本数据类型介绍

    CRect类是MFC中用于表示矩形的类。它提供了方便的方法来操作矩形的位置和大小。CRect类常用于图形绘制、窗口管理和布局等场景。 可以用于绘制矩形、椭圆、圆等图形时需要指定其位置和大小。此外,CRect类还常用于窗口管理,可以通过CRect对象来设置窗口的位置和大小。它

    2024年02月11日
    浏览(43)
  • Java实训第八天——2023.6.14

    官方文档:https://v2.cn.vuejs.org/v2/guide/index.html 1.将vue.min.js复制到js中: 2.在demo01.html中,引入js 3.将官方文档复制到demo01.html中 demo01.html代码如下: 4.出现如下结果,则环境搭建成功! html代码如下: 运行结果: html代码如下: 运行结果如下: 运行结果: 代码如下: 初始页面:

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包