zoukankan      html  css  js  c++  java
  • leetcode38之外观序列

    题目描述:

    给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

    注意:整数序列中的每一项将表示为一个字符串。

    「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/count-and-say

    代码实现:

     1 def countAndSay(n):
     2     '''
     3 
     4     :param n:
     5     :return:
     6     '''
     7     cur_num = 11  # 表示当前数
     8     # 输出第n个数,因从首项为11,所以循环遍历n-2次得到第n个数
     9     for i in range(n-2):
    10         right = 0  # 向右循环遍历
    11         res = []  # 统计上一个数中数字个数,用来表示下一个数
    12         cur_num = str(cur_num)
    13         # 统计数中各字符个数
    14         while right < len(cur_num) - 1:
    15             # 统计字符个数
    16             temp_right = right
    17             count = 1
    18             count1 = 1
    19             # 判断相邻元素是否相等
    20             while temp_right < len(cur_num) - 1 and cur_num[temp_right] == cur_num[temp_right + 1]:
    21                 count1 += 1
    22                 temp_right += 1
    23 
    24             if temp_right == right:  # right没发生变化,相邻元素不相等
    25                 temp1 = [count, int(cur_num[right])]
    26                 res.append(temp1)
    27                 right += 1
    28             else:  # right发生了变化,相邻元素相等
    29                 temp = [count1, int(cur_num[temp_right])]
    30                 res.append(temp)
    31                 right += count1
    32 
    33         # 因最后一位可能没判断到,所以需要进一步判断最后一位
    34         if cur_num[-1] != cur_num[-2]:  # 最后一位没判断到
    35             temp2 = [1, int(cur_num[-1])]
    36             res.append(temp2)
    37         # else:  # 最后一位判断到了,什么也不用做
    38         #     continue
    39 
    40         cur_num = sum(res, [])
    41         num = ""
    42         for i in cur_num:
    43             num += str(i)
    44         cur_num = int(num)
    45         print(cur_num)
    46         # cur_num=int(num+str(i) for i in cur_num)
    47     return str(cur_num) if n != 1 else "1"
    48 
    49 
    50 print("----------测试countAndSay---------")
    51 res = countAndSay(7)
    52 print("res=", res)

    输出:

    21
    1211
    111221
    312211
    13112221
    res= 13112221

    总结:本题花费了大量时间来实现,真是费心费力,呵累!!!其思想就是怎么去统计一串字符串中连续相同元素个数,当然相邻元素不相同时个数就是1。

  • 相关阅读:
    struts2: 通过流输出实现exce导出
    Spring Security笔记:Remember Me(下次自动登录)
    Spring Security笔记:登录尝试次数限制
    Spring Security笔记:使用BCrypt算法加密存储登录密码
    Spring Security笔记:使用数据库进行用户认证(form login using database)
    Spring Security笔记:HTTP Basic 认证
    Spring Security笔记:自定义登录页
    Spring Security笔记:Hello World
    Spring官网下载dist.zip的几种方法
    UML:类图复习-鸡生蛋,蛋生鸡
  • 原文地址:https://www.cnblogs.com/rounie/p/13236883.html
Copyright © 2011-2022 走看看