zoukankan      html  css  js  c++  java
  • LeetCode--038--报数(*)

    问题描述:

    报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

    1.     1
    2.     11
    3.     21
    4.     1211
    5.     111221
    

    1 被读作  "one 1"  ("一个一") , 即 11
    11 被读作 "two 1s" ("两个一"), 即 21
    21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211

    给定一个正整数 n ,输出报数序列的第 n 项。

    注意:整数顺序将表示为一个字符串。

    方法1:

     1 class Solution(object):
     2     def countAndSay(self, n):
     3         """
     4         :type n: int
     5         :rtype: str
     6         """
     7         ans = "1"
     8         n -= 1
     9         while n > 0:
    10             res = ""
    11             pre = ans[0]
    12             count = 1
    13             for i in range(1, len(ans)):
    14                 if pre == ans[i]:
    15                     count += 1
    16                 else:
    17                     res += str(count) + pre
    18                     pre = ans[i]
    19                     count = 1
    20             res += str(count) + pre
    21             ans = res
    22             n -= 1
    23         return ans
    24         

    变体:

     1 class Solution(object):
     2     def countAndSay(self, n):
     3         """
     4         :type n: int
     5         :rtype: str
     6         """
     7         ans = '1'
     8         while n > 1:
     9             ans = self.countStr(ans)
    10             n -= 1
    11         return ans
    12     
    13     def countStr(self,s):
    14         count = 0;ans = "";tmp = s[0]
    15         for i in range(len(s)):
    16             if s[i] == tmp:
    17                 count += 1
    18             else:
    19                 ans += str(count) + tmp
    20                 tmp = s[i];count = 1
    21         ans += str(count) + tmp
    22         return ans

    方法2:递归

     1 class Solution(object):
     2     def countAndSay(self, n):
     3         """
     4         :type n: int
     5         :rtype: str
     6         """
     7         if n == 1:
     8             return '1'
     9         s = self.countAndSay(n-1)
    10         res = ''
    11         count = 0
    12         for i in range(len(s)):
    13             count += 1
    14             if i == len(s) - 1 or s[i] != s[i+1]:
    15                 res += str(count)
    16                 res += s[i]
    17                 count = 0
    18         return res
    19         

    2018-07-23 21:30:30

  • 相关阅读:
    一段笑话
    遇到了DIV被下拉框挡住的问题,2天没有解决了~晕死我了#)
    盘点JavaScript中5个常用的对象
    C# ARGB转RGB之Alpha通道混合与亮度
    工作进度进度条js
    一个很漂亮的图片浏览效果js
    很好的几个js滑动条效果
    实现textarea限制输入字数
    Asp 出现Microsoft JScript 编译错误 (0x800A03EC) 缺少 ';'解决办法
    Request.UrlReferrer详解
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/9357061.html
Copyright © 2011-2022 走看看