Top 100 Linked Question 修炼------第十九题、第二十二题

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 查看本文章

猜你喜欢

转载自blog.csdn.net/sir_TI/article/details/88526876