Leetcode-38-Count-and-Say(學渣的痛大神們不懂。。。)

class Solution(object):n def generate(self, string):n string_list = [x for x in string]n res = []n length = len(string_list)n if length == 1:n res.append({string: 1})n else:n index = 0n while index < length:n current = string_list[index]n count = 1n if index == length - 1:n if string_list[index] != string_list[index - 1]:n res.append({string_list[index]: 1})n breakn skip = None # 用來跳過後續重複的indexn for follow in range(index + 1, length):n if current == string_list[follow]:n count += 1n else:n skip = follown breakn res.append({string_list[index]: count})n index += 1n if skip:n index = skipn combine = ""n for r in res:n single_combine = ""n for k, v in r.items():n single_combine = str(v) + kn combine += single_combinen return combinenn def countAndSay(self, n):n """n :type n: intn :rtype: strn """n base = "1"n if n == 1:n return basen else:n while n > 1:n base = self.generate(base)n n -= 1n return basen

看了好幾次都沒有看懂題目意思,學渣的痛你們大神不懂。。。

恩,我需要解釋一下。

1)、1

2)、11,表示1)有1個1,組合起來就是11。

3)、21,表示2)有2個1,組合起來就是21。

4)、1211,表示3)有1個2,2個1,組合起來就是1211。

5)、111221,表示4)有1個1,1個2,2個1,組合起來就是111221。

6)、312211,表示5)有3個1,2個2,2個1,組合起來就是312211。

我的思路是通過統計字元出現的次數,來形成字元串,但要注意當相鄰的元素相同時要跳過,直到到達不同的字元為止。1211 --> {1: 1, 2: 1, 1: 2},然後生成新的字元串 --> 112112,最後用遞歸解決。


推薦閱讀:

一道阿里筆試題,思路應該是怎樣?
面試經典問題——每次可以走 1 級或 2 級,上 100 級台階有多少走法
何愷明團隊推出Mask^X R-CNN,將實例分割擴展到3000類
JDK源碼DualPivotQuicksort類中利用移位求除7近似值?

TAG:LeetCode | 算法与数据结构 | Python |