zoukankan      html  css  js  c++  java
  • leetcode 38. Count and Say

    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, 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"
    

    class Solution(object):
        def countAndSay(self, n):
            """
            :type n: int
            :rtype: str
            """
            """
            1=>1
            """
            k = "1"
            
            def say(m):
                # greedy
                ans = ""
                c = 1
                for i in xrange(1, len(m)):
                    if m[i] == m[i-1]:
                        c += 1
                    else:
                        ans += str(c) + m[i-1]
                        c = 1
                ans += str(c) + m[-1]
                return ans
                
            for i in xrange(1, n):
                k = say(k)
            return k
            
    

     经典的字符计数问题!或者也可以使用贪心算法求解,还可以避免最后为len-1的判断。

    class Solution(object):
        def countAndSay(self, n):
            """
            :type n: int
            :rtype: str
            """
            """
            1=>1
            """
            k = "1"
            
            def say(m):
                # greedy
                ans = ""     
                i = 0
                while i<len(m):
                    s, c = m[i], 1
                    while i+1<len(m) and m[i+1] == m[i]:
                        i += 1
                        c += 1
                    ans += str(c)+str(s)
                    i += 1
                return ans
                
            for i in xrange(1, n):
                k = say(k)
            return k
            
    
  • 相关阅读:
    神马搜索 面试小结
    我的第一篇paper
    【转载】技巧:Vim 的纵向编辑模式
    实习求职小结
    将博客园界面打造成Hexo经典主题Light
    试一下Markdown
    四色标记算法
    射雕三部曲的优美片段
    Docker
    Sublime Text 3 文档
  • 原文地址:https://www.cnblogs.com/bonelee/p/9131212.html
Copyright © 2011-2022 走看看