leetcode:38.报数

简介: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。

题目描述:


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


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(1 ≤ n ≤ 30),输出报数序列的第 n 项。


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


示例1:


输入: 1
输出: "1"


示例2:


输入: 4
输出: "1211"


题目难度:简单


分析:


emmmm,刚开始我都没看懂题目,心想简单难度的都这样了吗?后来看懂了题目才明白是怎么一回事,也就是说下一个字符串是根据上一个字符串生成的,明白了这个很容易想到类似的斐波那契数列,也就明白了需要用到递归的方法求解。


代码如下:


class Solution {
    public String countAndSay(int n) {
        StringBuilder sb = new StringBuilder();
        // 递归结束的条件
        if (n == 1) {
            return "1";
        } else {
          // 利用递归求出所有的字符串
            String s = countAndSay(n - 1);
            // 定义临时变量用来确定每次要“读”的字符
            char temp = s.charAt(0);
            // 用来记录连续的字符个数,也就是读作:两个一/二,中的“两”
            int count = 0;
            // 遍历当前字符串
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                // 如果两个字符相等,应该合并,读作:两个一/二
                if (c == temp) {
                    count++;
                } else {
                  // 不等时就把个数和字符添加到结果集,同时初始化临时变量和个数
                    sb.append(String.valueOf(count)).append(temp);
                    temp = c;
                    count = 1;
                }
            }
            sb.append(String.valueOf(count)).append(temp);
        }
        return sb.toString();
    }
}


总结:


关于递归,一定要有一个结束条件,否则就会死循环了。

目录
相关文章
|
19天前
|
安全 开发者 Windows
Win10/11系统永久暂停更新教程,避免频繁更新 Win 系统出问题,一个小工具就能搞定。
Win10/11系统永久暂停更新教程,避免频繁更新 Win 系统出问题,一个小工具就能搞定。
497 7
|
移动开发 JavaScript Oracle
Oracle根据汉字取拼音首字母的function
Oracle根据汉字取拼音首字母的function
8213 0
|
Java 存储
线程池的核心参数有哪些?
线程池七大核心参数:核心/最大线程数、线程保持时间及单位、阻塞队列、线程工厂与拒绝策略。
724 79
|
3月前
|
C++
什么是单项式
单项式是代数式中的一种
|
5月前
|
前端开发 开发工具 开发者
HarmonyOS NEXT实战:沙箱工具
本教程介绍如何在HarmonyOS中通过SDK实现沙箱文件管理。主要内容包括:获取应用沙箱路径、使用fs模块进行文件操作,如打开、复制、读写和删除文件等。通过封装SandboxUtil工具类,实现保存文件到沙箱及清除沙箱文件功能,帮助开发者掌握HarmonyOS应用文件管理技巧。
226 0
|
6月前
|
机器学习/深度学习 存储 API
飞桨x昇腾生态适配方案:06_算子适配举例
本节详细解析了Paddle-API与CANN-Kernel之间的差异及适配策略,涵盖三种主要场景:参数缺失或不对应、数据类型不匹配以及layout转换。针对不同问题提出具体解决方案,如通过默认赋值或计算补充参数、使用`Cast`操作转换数据类型、借助`Transpose`调整数据布局等。同时,以ReluGrad和nll_loss算子为例,深入说明参数对齐、数据类型转换及转置操作的实现流程,为开发者提供清晰的适配指导。
172 0
|
8月前
|
前端开发 持续交付 网络安全
零成本快速搭建美观个人网站
这是一份详细的零成本个人网站搭建指南,采用 Hugo + PaperMod 主题生成静态网站并托管于 GitHub Pages,实现全自动部署与全球 CDN 加速。方案包含基础配置、内容添加、进阶美化技巧及优化方法,如配色调整、响应式布局和 SEO 优化等。相比传统 WordPress 方案,本方法完全免费、加载速度快且无需服务器维护,适合开发者快速建立专业在线形象。
420 6
|
9月前
|
机器学习/深度学习 自然语言处理 语音技术
《双向LSTM:序列建模的强大引擎》
双向长短时记忆网络(BiLSTM)是LSTM的扩展,通过同时处理序列的正向和反向信息,显著提升对序列数据的建模能力。它在每个时间步运行两个LSTM,分别按正向和反向顺序处理数据,融合前后向隐藏状态,捕捉长距离依赖关系和上下文信息,增强模型鲁棒性。BiLSTM广泛应用于文本分类、情感分析、命名实体识别、机器翻译、语音识别及时间序列预测等任务,表现出色。
510 14
|
9月前
|
传感器 人工智能 算法
《流形学习:破解人工智能复杂数据处理难题的利刃》
流形学习降维算法,如Isomap和LLE,通过挖掘数据的内在几何结构,有效应对高维图像、文本和传感器等复杂数据带来的挑战。Isomap基于测地线距离保持全局结构,LLE则侧重局部线性重构,二者在人脸识别、生物医学数据分析、自然语言处理及传感器数据分析等领域展现出独特优势。尽管面临计算复杂度和噪声影响等挑战,流形学习仍为复杂数据处理提供了强大工具,未来结合深度学习等技术将有更广泛应用前景。
292 10