LeetCode第38题:外观数列(python)

题目:
在这里插入图片描述
在这里插入图片描述

思路:
题目看起来很绕,实际上就是利用这个函数来数数,比如说n=3的时候,数n=2的时候一共有几个数,n=2的时候字符串为’11’,也就是2个1,所以输出结果为’21’

弄明白题意之后,就按顺序遍历字符串,只考虑n>2时的情况(因为n=1和n=2的时候结果是已知的),如果当前位i和下一位i+1的字符相同,则让字符数+1;如果不同,则对字符串进行拼接;最后一组字符需要单拿出来进行拼接。按照此思路写出的代码如下:

class Solution:
    def countAndSay(self, n: int) -> str:
        if n == 1:
            return '1'
        elif n == 2:
            return '11'
		
		# 设置初始字符串
        rstr = '11'
        while n > 2:
        	# 设置拼接字符串
            tstr = ''
            r_count = 1
            for i in range(len(rstr)-1):
                # 字符相同,则字符数+1
                if rstr[i] == rstr[i+1]:
                    r_count = r_count + 1
                else:
                    # 字符不同,则进行拼接
                   tstr = tstr + str(r_count) + str(rstr[i])
                   r_count = 1

            # 处理最后一组字符的拼接
            if i + 1 == len(rstr)-1:
                tstr = tstr + str(r_count) + str(rstr[i+1])

            rstr = tstr
            n = n - 1
        return rstr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值