19. Remove Nth Node From End of List
题目解释:从后面算起,删除第N个结点
算法思想:思想比较简单,就是采用双指针法,刚开始的时候都是指向头结点,一个指针提前走n步,然后两个指针一起移动,等到先移动的那个指针移动到末尾的时候,那么另外一个指针所指向的结点就是倒数第n个结点。
PS:题目比较简单,思路也是比较常规,掌握就能解决
code:
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
# 取得长度
fast = slow = head
for _ in range(n):
fast = fast.next
if not fast:
return head.next
while fast.next:
fast = fast.next
slow = slow.next
# 删除结点
slow.next = slow.next.next
return head
22. Generate Parentheses
题目意思:给定一个非负整数,然后需要产生一个有效的匹配括号对。
题目分析:一看题目,自己真的是....(不会,尴尬,但是咱有学的本领)。需要产生有效的括号匹配,那么首先需要明白怎么样的情况才算是有效的(陪着你从小到大的圆括号,应该知道怎么样才是匹配的)。好了,不多说了,直接切入正题:
本题主要是采用回溯法,回溯法是什么呢?回溯法解释,知道了回溯法是什么,那么我们就开始解题了,虽然过程很艰难,但是学习到了的知识还是很快乐...
建议:对这个代码过程不是很熟悉的话,可以自己尝试使用IDE的Debug功能或者自己使用手来画出递归调用图
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def backtrack(S = '', left = 0, right = 0):
# 当出现的括号数已经满足要求时,将其结果加入到最终的结果中
if len(S) == 2 * n:
ans.append(S)
return
if left < n:
backtrack(S+'(', left+1, right)
if right < left:
backtrack(S+')', left, right+1)
backtrack()
return ans
总结
做题的时候感觉很难就对了,因为你正在学习.......
扫描二维码关注公众号,回复:
5725732 查看本文章
![](/qrcode.jpg)