-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem38.py
More file actions
67 lines (52 loc) · 1.41 KB
/
problem38.py
File metadata and controls
67 lines (52 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'''
38. Count and Say
Easy
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 is read off as "one 1" or 11.
11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.
Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1
Output: "1"
Example 2:
Input: 4
Output: "1211"
Solution:
Simple recusion can solve this problem, can be optimized to use dynamic programming.
Not so difficult, get the current string by previous one.
'''
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
if n == 1:
return '1'
else:
tmp_str = self.countAndSay(n-1)
cnt = 0
current_char = ''
rst = ''
for i in tmp_str:
if current_char != i:
if cnt != 0:
rst += str(cnt)
rst += current_char
current_char = i
cnt = 1
else:
cnt += 1
rst += str(cnt)
rst += current_char
return rst
if __name__ == '__main__':
s = Solution()
print s.countAndSay(5)