返回

解码“外观数列”的神秘密码:从1到n的探索之旅

闲谈

在浩瀚的数学宇宙中,总是隐藏着许多令人着迷的秘密。今天,让我们将目光聚焦在LeetCode第38题的“外观数列”上,一起踏上探索这个奇特数列的征途。

外观数列的定义

“外观数列”是一个整数序列,从数字1开始。从第二项开始,每一项都是对前一项的。换句话说,每一项都是对前一项的“读数”。比如:

  • 1
  • 11 (读作“一个一”)
  • 21 (读作“两个一”)
  • 1211 (读作“一个二,一个一”)
  • 111221 (读作“一个一,一个一,两个二,一个一”)

外观数列的特点

外观数列从1开始,每一项都是前一项的。
外观数列的每一项都是由数字和数字组成的字符串。
外观数列的每一项都是有限长度的。

外观数列的递推关系

外观数列具有以下递推关系:

countAndSay(n) = countAndSay(n-1)

其中,countAndSay(n)是外观数列的第n项。

外观数列的代码实现

下面是用Python实现外观数列的代码:

def countAndSay(n):
    if n == 1:
        return "1"
    else:
        prev = countAndSay(n-1)
        result = []
        count = 1
        for i in range(len(prev)):
            if i < len(prev) - 1 and prev[i] == prev[i+1]:
                count += 1
            else:
                result.append(str(count))
                result.append(prev[i])
                count = 1
        return ''.join(result)

# 测试代码
print(countAndSay(1))
print(countAndSay(2))
print(countAndSay(3))
print(countAndSay(4))
print(countAndSay(5))

输出结果

1
11
21
1211
111221

总结

外观数列是一个有趣的数学问题。它不仅涉及到数字,还涉及到字符串和递归。外观数列的递推关系也很简单,易于理解。此外,外观数列的代码实现也不难,初学者也可以轻松掌握。如果你对数学和编程感兴趣,不妨尝试挑战一下LeetCode第38题“外观数列”。