leetcode-IT学习神器之AI智喵-收割leetcode第38题-外观数列

一、解题

1.1 leetcode解释

给定一个正整数 n ,输出外观数列的第 n 项。
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
你可以将其视作是由递归公式定义的数字字符串序列:

  • countAndSay(1) = “1”
  • countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。
    前五项如下:
1.     1
2.     11
3.     21
4.     1211
5.     111221
第一项是数字 1 
描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 "11"
描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 "21"
描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"
描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"

要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组。要将描述转换为数字字符串,先将每组中的字符数量用数字替换,再将所有描述组连接起来。
例如,数字字符串 “3322251” 的描述如下图:
在这里插入图片描述
示例 1:

输入:n = 1
输出:"1"

解释:这是一个基本样例。
示例 2:

输入:n = 4
输出:"1211"
解释:
countAndSay(1) = "1"
countAndSay(2) = 读 "1" = 一 个 1 = "11"
countAndSay(3) = 读 "11" = 二 个 1 = "21"
countAndSay(4) = 读 "21" = 一 个 2 + 一 个 1 = "12" + "11" = "1211"

提示:

  • 1 <= n <= 30
1.2 AI智喵 思路
1.2.1 AI智喵 题目描述:

给定一个正整数 n ,输出外观数列的第 n 项。
外观数列是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
例如,第二项是 11 ,即 “ 读 1 ” “ 写 1 ”,第三项是 21 ,即 “ 读 2 ” “ 写 1 ”。第四项是 1211 ,即 “ 读 1 ” “ 写 1 ” “ 读 2 ” “ 写 1 ”。

1.2.2 AI智喵 算法思路:
  1. 从第二项开始,每一项都是对前一项的描述,因此可以使用递归的方式来求解。
  2. 对于第 n 项,先递归求解第 n-1 项。
  3. 对于第 n-1 项,从左到右遍历,记录当前数字的出现次数和数字本身,当遇到不同的数字时,将记录的次数和数字添加到结果中,并清空记录。
  4. 最后一次记录的数字和出现次数也需要添加到结果中。

二 、AI智喵 具体实现

2.1 java代码实现:
class solution {
public:
    string countandsay(int n) {
        if (n == 1) return "1"; // 递归终止条件
        string prev = countandsay(n - 1); // 递归求解前一项
        string res; // 存储结果
        int count = 1; // 记录数字出现次数
        char num = prev[0]; // 记录数字本身
        for (int i = 1; i < prev.size(); i++) {
            if (prev[i] == num) { // 如果当前数字和记录的数字相同,次数加一
                count++;
            } else { // 如果当前数字和记录的数字不同,将记录的次数和数字添加到结果中
                res += to_string(count) + num;
                num = prev[i]; // 更新记录的数字和次数
                count = 1;
            }
        }
        res += to_string(count) + num; // 最后一次记录的数字和次数也需要添加到结果中
        return res;
    }
};
python实现
class solution:
    def countandsay(self, n: int) -> str:
        if n == 1:
            return "1"
        prev = self.countandsay(n-1)
        res = ""
        count = 1
        num = prev[0]
        for i in range(1, len(prev)):
            if prev[i] == num:
                count += 1
            else:
                res += str(count) + num
                num = prev[i]
                count = 1
        res += str(count) + num
        return res

这里使用了python的字符串操作,代码比c++简洁一些,但是原理和思路都是一样的。

三 、报错解析

举例:
在这里插入图片描述AI智喵排错
在这里插入图片描述
在这里插入图片描述

四、运行结果

在这里插入图片描述

五、AI智喵 介绍

AI智喵是基于强大的AI能够解决包含IT,分析及运营等大部分场景的问题。

  1. 互联网运营思路
  2. IT编程
  3. 代码纠错
  4. 编程思路
  5. 文案等
  6. ····
5.1 多场景使用

作者在内部已经集成了很多场景,开箱即使有,用户还可以自定义自己的轻应用
在这里插入图片描述

5.2 对话式思路

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 作图能力

平台还提供优秀的作图能力,出处:midjourney
作品展示:
在这里插入图片描述阅览
在这里插入图片描述在这里插入图片描述在这里插入图片描述

六、内容出处

全部内容出处:AI智喵 点击进入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值