博客域名:
http://www.xnerv.wang
原题页面: https://oj.leetcode.com/problems/count-and-say/
题目类型:字符串
难度评价:★
本文地址: http://blog.csdn.net/nerv3x3/article/details/39453287
原题页面: https://oj.leetcode.com/problems/count-and-say/
题目类型:字符串
难度评价:★
本文地址: http://blog.csdn.net/nerv3x3/article/details/39453287
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 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, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
主要是计数的逻辑。每一轮,遇到一个不同的字符时,就结束到该轮的计数。但是需要注意的是最后一轮的计数,因为遇到的是字符串src的结尾,所以需要强制结束这一轮的计数,就类似于编译原理词法分析最后的那个$符号的作用。
class Solution:
def doCountAndSay(self, src):
char = src[0]
num = 0
result = ""
for c in src:
if char == c:
num += 1
else:
result += (str(num) + char)
char = c
num = 1
result += (str(num) + char)
return result
# @return a string
def countAndSay(self, n):
if 0 == n:
return ""
elif 1 == n:
return "1"
result = "1" # str is a keyword
for i in range(1, n):
result = self.doCountAndSay(result)
return result