返回
技术专家解读:解剖 LeetCode 38. 外观数列,探索背后的奥秘
前端
2023-11-15 13:52:11
前言
LeetCode 38. 外观数列是一道经典题目,不仅考察了算法技巧,还涉及数学和字符串操作。它要求我们生成一个序列,其中每个数字代表前一个数字出现的次数。例如,111221 表示:1 出现一次,1 出现两次,2 出现一次。
解题方法
1. 递归方法
递归方法以简洁明了著称,它将问题分解为更小的子问题。以下是递归方法的步骤:
- 基础情况: 如果输入的字符串为空,则返回空字符串。
- 递归调用: 对于非空字符串,创建一个新字符串,并迭代原始字符串。
- 计数: 记录当前字符出现的次数。
- 追加: 将字符和计数添加到新字符串中。
- 递归: 使用原始字符串的剩余部分递归调用该函数。
2. 迭代方法
迭代方法通过使用循环逐个字符地遍历字符串。以下是迭代方法的步骤:
- 初始化: 创建两个变量,
count
用于计数,result
用于存储结果。 - 遍历: 迭代原始字符串,对于每个字符:
- 如果当前字符与上一个字符不同,则重置
count
。 - 增加
count
。 - 将字符和计数添加到
result
中。
- 如果当前字符与上一个字符不同,则重置
- 返回: 返回
result
。
代码示例
递归方法:
def countAndSay(n):
if n == 0:
return ""
result = ""
count = 1
prev = n[0]
for i in range(1, len(n)):
if n[i] == prev:
count += 1
else:
result += str(count) + prev
count = 1
prev = n[i]
result += str(count) + prev
return result
迭代方法:
def countAndSay(n):
count = 1
result = ""
for i in range(len(n)):
if i < len(n) - 1 and n[i] == n[i+1]:
count += 1
else:
result += str(count) + n[i]
count = 1
return result
总结
LeetCode 38. 外观数列是一道经典题目,可以通过递归或迭代方法解决。这道题不仅考察了算法技巧,还涉及数学和字符串操作。希望这篇文章能够帮助你更好地理解这道题,并为解决更复杂的问题做好准备。