【递归】(一) 递归原理

这篇博客深入讲解了递归原理,并通过反转字符串和两两交换链表中的节点两个实例详细阐述递归的解决过程。讨论了不同解法的空间和时间复杂度,包括迭代和递归的实现。提供了官方和作者的实现参考链接。
摘要由CSDN通过智能技术生成

目录

一、递归原理

二、反转字符串

2.1 题目要求

2.2 解决过程

四、递归函数

四、反转字符串 —— 解决方案

五、两两交换链表中的节点

5.1 题目要求

5.2 解决过程


一、递归原理

参考文献:https://leetcode-cn.com/explore/orignial/card/recursion-i/256/principle-of-recursion/1101/ 


二、反转字符串

2.1 题目要求

2.2 解决过程

注意事项

做算法题时尽量不要使用太多语言特性,使方法的实现不依赖语言,例如以下就是一个令人尴尬的例子:

2020/07/20 - 77.37% (48ms) - 次优

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s.reverse()

个人实现

法一:迭代交换 / 双指针。空间复杂度 O(1),时间复杂度 O(n)。

2020/07/20 - 60.58% (52ms)

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        times = len(s) // 2  # 迭代交换次数
        for i in range(times):
            s[i], s[-i-1] = s[-i-1], s[i]

法二:切片反转。也是不太通用的解法。但注意不能写成 s = s[::-1],因为会超出内存空间限制!

2020/07/20 - 89.97%(44ms) - 最优

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        s[:] = s[::-1]  # 注意不能 s = s[::-1] 因为会超出内存空间限制

官方实现与说明

class Solution:
    def reverseString(self, s):
        s.reverse()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值