Python 中查找观测数列第 n 项的程序
假设我们有一个数字 n,我们需要生成“观测数列”中的第 n 项。这是一个序列,其一些项如下所示:
- 1
- 11
- 21
- 1211
- 111221
字符串将按如下方式读取
- 1(一)
- 11(一个 1)所以读取前面的 1,并说“一个 1”
- 21(两个 1)所以读取前面的 11,并说“两个 1”
- 1211(一个 2 一个 1)所以读取前面的 21,并说“一个 2 一个 1”
- 111221(一个 1 一个 2 两个 1)所以读取前面的 1211,并说“一个 1 一个 2 两个 1”
假设我们有一个数字 n,1 <= n < = 30,那么我们需要生成第 n 项。为了解决这个问题,我们将遵循以下方法:
- 设置 s := “1”
- 如果 n = 1,则返回 s
- 对于 i := 2 到 n + 1
- j := 0
- temp := 空字符串
- curr = 空字符串,count := 0
- 当 j < s 的长度时,执行以下操作
- 如果 curr 为空字符串,则
- curr := s[j],count := 1,并将 j 增加 1
- 否则如果 curr 为 s[j],则
- 将 count 和 j 增加 1
- 否则
- temp := temp + count 作为字符串 + curr
- curr = 空字符串
- count := 0
- 如果 curr 为空字符串,则
- temp := temp + count 作为字符串 + curr
- 返回 s
让我们看看以下实现以更好地理解:
示例
class Solution(object): def solve(self, n): s = "1" if n == 1: return s for i in range(2,n+1): j = 0 temp = "" curr = "" count = 0 while j <len(s): if curr =="": curr=s[j] count=1 j+=1 elif curr == s[j]: count+=1 j+=1 else: temp+= str(count) + curr curr="" count = 0 temp+=str(count) + curr s=temp return s ob = Solution() n = 5 print(ob.solve(n))
输入
5
输出
"111221"
广告