LeetCode算法—递归

一:递归

1、定义:函数直接或者间接的调用自己

2、四个要素

(1)接受的参数

(2)返回的值

(3)终止条件

(4)如何拆解

二:LeetCode

509 斐波那契数列

def func(n):
    if n<2:
        return n
    else:
        return func(n-1)+func(n-2)

n=int(input())
print(func(n))

206 反转链表

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        # 基准条件:空链表或者只有一个节点的链表
        if not head or not head.next:
            return head
        # 递归反转子链表
        new_head = self.reverseList(head.next)
        # 将当前节点连接到反转后的子链表末尾
        head.next.next = head
        head.next = None
        # 返回新的头节点
        return new_head

344 反转字符串

#方法1 切片法
#方法2 双指针
# class Solution:
#     def func(self,s):
#         left,right=0,len(s)-1
#         while left<=right:
#             s[left],s[right]=s[right],s[left]
#             left+=1
#             right-=1
#         return s
#方法3 递归的方法
class Solution:
    def reverseString(self, s: List[str], left: int = 0, right: int = None) -> None:
        if right is None:
            right = len(s) - 1
        # 基本条件:当左指针不再小于右指针时,停止递归
        if left >= right:
            return
        # 交换左右指针所指的元素
        s[left], s[right] = s[right], s[left]
        # 递归处理下一个子数组
        self.reverseString(s, left + 1, right - 1)
posted @ 2024-09-12 22:35  Gsupl.落浅~  阅读(5)  评论(0编辑  收藏  举报