【华为面试基础题】数列描述

描述

有一个数列A[n],从A[0]开始每一项都是一个数字,数列中A[n+1]都是A[n]的描述,其中A[0]=1,规则如下:

  • A[0]:1
  • A[1]:11 (含义其中A[0]=1是1个1即11,表示A[0]从左到右连续出现了1次1 )
  • A[2]:21(含义其中A[1]=11是2个1即21,表示A[1]从左到右连续出现了2次1 )
  • A[3]1211(含义其中A[2]从左到右是由一个2和一个1组成即1211,表示A[2]从左到右连续出现了一次2又连续出现了一次1)
  • A[4]:111221(含义A[3]=1211,从左到右:是由一个1、一个2、两个1组成,即“111221”,表示A[3]从左到右连续出现了一次“1”,又连续出现了一次“2”,又连续出现了两次“1”)

请输出第n项的结果(A[n], 0<=n<=59).

输入描述:
数列第n项(0<= n <=59)
4

输出描述:
数列内容: 111221

示例1

输入: 4
输出: 111221

# 使用递归函数
def count_and_say(n):
    if n == 0:
        return "1" #如果n等于0,那么返回字符串"1",因为数列的第一个元素就是1。
    else:
        prev = count_and_say(n - 1) #否则,调用自身(递归)计算n-1的情况,并将结果保存在变量prev中。
        result = "" #初始化一个空字符串result,用于存储最终的结果
        i = 0
        while i < len(prev): #使用while循环遍历prev中的每个字符。
            count = 1 #对于每个字符,初始化计数器count为1
            while i + 1 < len(prev) and prev[i] == prev[i + 1]: #然后使用另一个while循环检查当前字符是否与下一个字符相同 
                i += 1 #如果是,则将计数器加1,同时将i加1以跳过相同的字符
                count += 1
            result += str(count) + prev[i] #当遇到不同的字符时,将计数器的值和当前字符拼接成一个字符串,添加到result中
            i += 1 #并将i加1以继续处理下一个字符。
        return result

# 测试示例
n = int(input('数列第几项'))
print("数列内容:", count_and_say(n))
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值