RounieJane

leetcode38之外观序列

题目描述:

给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意:整数序列中的每一项将表示为一个字符串。

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-and-say

代码实现:

 1 def countAndSay(n):
 2     '''
 3 
 4     :param n:
 5     :return:
 6     '''
 7     cur_num = 11  # 表示当前数
 8     # 输出第n个数,因从首项为11,所以循环遍历n-2次得到第n个数
 9     for i in range(n-2):
10         right = 0  # 向右循环遍历
11         res = []  # 统计上一个数中数字个数,用来表示下一个数
12         cur_num = str(cur_num)
13         # 统计数中各字符个数
14         while right < len(cur_num) - 1:
15             # 统计字符个数
16             temp_right = right
17             count = 1
18             count1 = 1
19             # 判断相邻元素是否相等
20             while temp_right < len(cur_num) - 1 and cur_num[temp_right] == cur_num[temp_right + 1]:
21                 count1 += 1
22                 temp_right += 1
23 
24             if temp_right == right:  # right没发生变化,相邻元素不相等
25                 temp1 = [count, int(cur_num[right])]
26                 res.append(temp1)
27                 right += 1
28             else:  # right发生了变化,相邻元素相等
29                 temp = [count1, int(cur_num[temp_right])]
30                 res.append(temp)
31                 right += count1
32 
33         # 因最后一位可能没判断到,所以需要进一步判断最后一位
34         if cur_num[-1] != cur_num[-2]:  # 最后一位没判断到
35             temp2 = [1, int(cur_num[-1])]
36             res.append(temp2)
37         # else:  # 最后一位判断到了,什么也不用做
38         #     continue
39 
40         cur_num = sum(res, [])
41         num = ""
42         for i in cur_num:
43             num += str(i)
44         cur_num = int(num)
45         print(cur_num)
46         # cur_num=int(num+str(i) for i in cur_num)
47     return str(cur_num) if n != 1 else "1"
48 
49 
50 print("----------测试countAndSay---------")
51 res = countAndSay(7)
52 print("res=", res)

输出:

21
1211
111221
312211
13112221
res= 13112221

总结:本题花费了大量时间来实现,真是费心费力,呵累!!!其思想就是怎么去统计一串字符串中连续相同元素个数,当然相邻元素不相同时个数就是1。

posted on 2020-07-04 22:03  RounieJane  阅读(171)  评论(0编辑  收藏  举报

导航