码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Count and Say

时间:2015-12-28 10:35:53      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

LeetCode解题之Count and Say


原题

把一个数字用几个几的形式表示出来。如2就是1个2,即12。对12进行数数得到1112,依次类推。假设初始数字是1,求第n个数是什么。起始5个数字为1, 11, 21, 1211, 111221, …

注意点:

  • 题目中的数字都用字符串表

例子:

输入: n = 5
输出: 111221

解题思路

用一个下标来表示当前统计的字符的起始位置,一个计数器来表示该字符的数目。不断读取直到字符不相等,添加到结果集中,更新起始位置和计数器。下面代码中的计数器用下标相减代替。

AC源码

class Solution(object):
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        result = "1"
        for __ in range(1, n):
            result = self.getNext(result)
        return result

    def getNext(self, s):
        result = []
        start = 0
        while start < len(s):
            curr = start + 1
            while curr < len(s) and s[start] == s[curr]:
                curr += 1
            result.extend((str(curr - start), s[start]))
            start = curr
        return "".join(result)


if __name__ == "__main__":
    assert Solution().countAndSay(4) == "1211"
    assert Solution().countAndSay(5) == "111221"

欢迎查看我的Github来获得相关源码。

LeetCode Count and Say

标签:

原文地址:http://blog.csdn.net/u013291394/article/details/50416817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!