38. 外观数列

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
解释:
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。



思路:详见注释。
初始字符串是:“1”,用ans字符串存放结果
遍历字符串,变量tar记录遇到的字符,变量index记录tar出现的次数
————当指针指向的字符与tar相同时,将index自增1;
————当指针指向的字符与tar不同时,将index和tar添加到ans的末尾。

 1 class Solution(object):
 2     def countAndSay(self, n):
 3         """
 4         :type n: int
 5         :rtype: str
 6         """
 7         # 第一趟结果已知,不参与循环
 8         result = "1"
 9         n -= 1
10         # 循环n-1趟
11         while n > 0:
12             # 初始化拼接字符串
13             ans = ""
14             # 记录当前字符,初始为原串首字符
15             tar = result[0]
16             # 计数器
17             count = 1
18             # 遍历原串,拼接结果字符串
19             for i in range(1, len(result)):
20                 # 指针指向的字符等于记录字符,计数器加1
21                 if result[i] == tar:
22                     count += 1
23                 # 不相等,拼接结果串,并在之后重置记录字符、计数器
24                 else:
25                     # 字符串拼接
26                     ans += str(count) + tar
27                     # 重置
28                     tar = result[i]
29                     count = 1
30             # 字符串拼接
31             ans += str(count) + tar
32             # 重置原字符串
33             result = ans
34             # 循环趟数减1
35             n -= 1
36         return result
37 
38 if __name__ == '__main__':
39     solution = Solution()
40     print(solution.countAndSay(1))
 
 
原文地址:https://www.cnblogs.com/panweiwei/p/12681988.html