目录
一、递归原理
参考文献: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()