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
            
    
  • 相关阅读:
    PPT1 例1
    皇宫看守 树形DP
    没有上司的晚会 树形DP
    将功补过 树形DP
    战略游戏 树形DP
    选课 树形DP
    二叉苹果树 树形DP
    GDOI2016总结
    加分二叉树 树形DP
    [注意]未做的题(最短路)
  • 原文地址:https://www.cnblogs.com/bonelee/p/9131212.html
Copyright © 2011-2022 走看看