leetcode学习笔记(一)

夏冰的学习笔记

工作快一年才意识到代码能力的重要,决心忘记大学的知识,重新刷一下题(leetcode)。。为考研做一下准备。

我的计划是从简单到困难,其间总结一下做题的套路,坚持下来就是胜利,加油。

2021 03.30 今日目标:简单题----4道

没想到第一题就卡住了 ,可能是数据结构已经忘记的差不多了,所以需要复习数据结构的知识

有效的括号  ----- 这一题采用的数据结构是栈和哈希表 具体用字典来对应 以后的解题思路可以参考下面的这位大佬

观察大佬的思路,就是先用算法思路,找到对应的数据结构,然后根据这个思路走流程,正常流,最后考虑

边界的问题,顺带分析时间和空间复杂度。

实际解决的代码如下:

来一步步分析,首先用字典建立好键值对,然后用栈,python语言其实并没有封装好的栈,但是我们可以用

列表来模拟栈的先进后出,如上图,首先stack=['?'],就是列表的方式,但是后续 如果给定的字符串的字符在字

典中,就加入栈,如果不在栈中且在栈顶对应的值并不相等,就返回false

如果最后这个栈的长度是1,也就是说,整个栈只剩下一个?的时候是全部匹配到了,返回true,否则返回false(这里是

考虑到了全是左括号的字符串)

接下来是21题 合并两个有序链表

根据以往的经验,遇到这种合并的题目,一般用递归比较方便,思路也比较好捋清

这个题目,我的思路是将一条链表作为基准,另一条链表排序插入,这样可能时间复杂度较高233

暂时先不考虑边界值,按照正常的流程来走:

1 判断给定的链表那个初值更小,将其作为基准

2 另一条链表继续跟第一条链表的第二个值相比较,如果比这个值大,就继续(递归),如果比这个值小就插入中间

3 然后将后面那条链表的第一个结点去掉,将第二个结点作为首结点,继续递归

边界值的情况:

其中一个链表为空,在函数最前面进行判断,为空则返回值为另一个链表

时间复杂度:O(m+n)

空间复杂度:O(m+n)  m、n分别为两条链表的长度

具体的代码:

这里两个链表为空是可以判断的(注意:python是没有null的,判断是否为空,可以用none)

看了这个大神的代码,发现我自己的思路转变为代码还是有一点瑕疵,我写代码卡在如何继续递归,还需要做别的插入操作吗,

而看了大神的操作,就能明白,只要一直递归到底就行。看上面代码,大神的分析如下:

那我的思路跟他的思路相比就会复杂一些,可能还要申请新的指针来存储一个结点和一个,可以说是半递归,他的方法就直接到最后一步

最重要的是,递归是层层返回的,因此并不需要再新建一个指针或者链表,直接接上就可以,如上图的:

l1.next = self.mergeTwolists(l1.next,l2) return l1

这里的意思就是l1.next接上后续的比小结果,一直到有一个为空,层层返回,就连接成一个链表,最后返回 l1即可

这个题目虽然很基础但是值得反复回味与复习

接下来下一题

22  括号生成

本题的题干是生成有效的括号,首先我们要找到括号的规律,

 

在题目中看到这些括号的规律是一定要闭合,且有序

这个题干让我想起了,第一题判断有效的括号组合,类比第一题,这个题目应该也是要用到栈的

n代表括号的对数,也代表左右括号的个数,我们可以用0代表左括号,1代表右括号,也就是说,这是n个0和n

个1 的排列组合,但是这个组合需要遵循一定的规律

由于自己思考太久都没有想法,这里就直接贴上大神的想法了。

没想到用到了深度优先和广度优先,而且数据结构也并不是栈,而是树

这里是采用深度优先遍历,并且分析题干意思,是直接将剩余括号数量作为判断的依据,然后

产生分支,并且将不符合规则的分支减掉即可,具体的代码如下:

我们来逐步分析这个代码 首先,结束条件:如果可用的左括号以及右括号都为0,那么一种情况已经算出来来,将其

放入列表中,如果右括号剩余的数量小于左括号的数量,这个结论是在画出二叉树得到的,也就说,没有右括号能跟左括号匹配

了,这种情况也需要返回(也是图上说的剪枝)

之后对左括号右括号的剩余数量进行判断,如果还有剩余,那么括号的数量减一,并继续递归下去

看完这个题目的解法之后,我的想法就是,需要回去复习深度、广度优先的算法了。这个列在日程中。

接着下一题:

整数反转

这道简单难度的题目,真的非常简单。。 直接用暴力破解法解决了这个问题,其中涉及到string以及int类型的相互转换,

还有string 的切片函数,以及python的指数函数等等。这些都是需要时常复习的。以下是我的代码。

可以看看大神们是怎么写的,规范一下自己的代码,整理一下思路

大神们都没有考虑用str和int相互转换的思路,而是统一用了数学的思维(是我想的太少了,汗。。),以下是大神的思路:

 

我来捋一捋这个思路,就是

 

 

 

 

继续做题,9. 回文数

这题我打算用整数转字符串以及数学的两种方法来解决。首先是字符串,没什么好说的直接上代码

字符串的解法:

数学的解法 如下:

中途碰到的问题就是,没有将x/10 强制类型转换一下,这样得到的也是整数

就先做到这里,之后的题目在后面的文章继续记录。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值