Leetcode 38 Count and Say
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.
从‘1’生成n-1次就可以得到第n个字符串。
双指针,j表示原来的数,i扫描之后的数,发现若不一样则新字符串增加'(i-j)'+s[j],然后 j=i。
这里使用'#'来表示字符串结束。
def count_and_say(n) return '1' if n == 1 s0 = '1' (n-1).times do s0 += '#' j, s1 = 0, '' s0.length.times do |i| if s0[i] != s0[j] s1 += (i-j).to_s + s0[j] j = i end end s0 = s1 end s0 end
单纯的模拟
class Solution(object): def countAndSay(self, n): s, ans = '1', '1' for x in range(n-1): ans = '' s += '#' count = 1 for i in range(1,len(s)): if s[i] == s[i-1]: count += 1 else: ans += str(count) + s[i-1] count = 1 s = ans return ans
浙公网安备 33010602011771号