leetcode第38题

简介: 难在了题目是什么意思呢?初始值第一行是 1。第二行读第一行,1 个 1,去掉个字,所以第二行就是 11。第三行读第二行,2 个 1,去掉个字,所以第三行就是 21。第四行读第三行,1 个 2,1 个 1,去掉所有个字,所以第四行就是 1211。第五行读第四行,1 个 1,1 个 2,2 个 1,去掉所有个字,所以第五航就是 111221。第六行读第五行,3 个 1,2 个 2,1 个 1,去掉所以个字,所以第六行就是 312

image.png

难在了题目是什么意思呢?

初始值第一行是 1。

第二行读第一行,1 个 1,去掉个字,所以第二行就是 11。

第三行读第二行,2 个 1,去掉个字,所以第三行就是 21。

第四行读第三行,1 个 2,1 个 1,去掉所有个字,所以第四行就是 1211。

第五行读第四行,1 个 1,1 个 2,2 个 1,去掉所有个字,所以第五航就是 111221。

第六行读第五行,3 个 1,2 个 2,1 个 1,去掉所以个字,所以第六行就是 312211。

然后题目要求输入 1 - 30 的任意行数,输出该行是啥。

解法一 递归

可以看出来,我们只要知道了 n - 1 行,就可以写出第 n 行了,首先想到的就是递归。

第五行是 111221,求第六行的话,我们只需要知道每个字符重复的次数加上当前字符就行啦。

1 重复 3 次,就是 31,2 重复 2 次就是 22,1 重复 1 次 就是 11,所以最终结果就是 312211。

publicStringcountAndSay(intn) {
//第一行就直接输出if (n==1) {
return"1";
    }
//得到上一行的字符串Stringlast=countAndSay(n-1);
//输出当前行的字符串returngetNextString(last);
}
privateStringgetNextString(Stringlast) {
//长度为 0 就返回空字符串if (last.length() ==0) {
return"";
    }
//得到第 1 个字符重复的次数intnum=getRepeatNum(last);
// 次数 + 当前字符 + 其余的字符串的情况returnnum+""+last.charAt(0) +getNextString(last.substring(num));
}
//得到字符 string[0] 的重复个数,例如 "111221" 返回 3privateintgetRepeatNum(Stringstring) {
intcount=1;
charsame=string.charAt(0);
for (inti=1; i<string.length(); i++) {
if (same==string.charAt(i)) {
count++;
        } else {
break;
        }
    }
returncount;
}

时间复杂度:

空间复杂度:O(1)。

解法二 迭代

既然有递归,那就一定可以写出它的迭代形式。

publicStringcountAndSay(intn) {
Stringres="1";
//从第一行开始,一行一行产生while (n>1) {
Stringtemp="";
for (inti=0; i<res.length(); i++) {
intnum=getRepeatNum(res.substring(i));
temp=temp+num+""+res.charAt(i);
//跳过重复的字符i=i+num-1;
        }
n--;
//更新res=temp;
    }
returnres;
}
//得到字符 string[0] 的重复个数,例如 "111221" 返回 3privateintgetRepeatNum(Stringstring) {
intcount=1;
charsame=string.charAt(0);
for (inti=1; i<string.length(); i++) {
if (same==string.charAt(i)) {
count++;
        } else {
break;
        }
    }
returncount;
}

时间复杂度:

空间复杂度:O(1)。

递归里边又用了一个递归,我觉得这点有点意思。

相关文章
|
消息中间件 边缘计算 物联网
物联网络管理平台(LoRaWAN)介绍|学习笔记
快速学习物联网络管理平台(LoRaWAN)介绍
1153 5
物联网络管理平台(LoRaWAN)介绍|学习笔记
|
人工智能 Cloud Native 开发者
开发者们,AI 原生应用架构专场 ·上海站来啦
云原生开源开发者沙龙 AI 原生应用架构专场,邀您一起交流,探索 AI 原生应用的工程化落地!
540 81
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,全面助力云上体育盛会
本文讲述了阿里云容器服务,通过安全稳定的产品能力和成熟的稳定性保障体系,全面助力云上体育赛场,促进科技之光与五环之光交相辉映。
阿里云容器服务,全面助力云上体育盛会
|
监控 前端开发 JavaScript
Webpack 中 HMR 插件的工作原理
【10月更文挑战第23天】可以进一步深入探讨 HMR 工作原理的具体细节、不同场景下的应用案例,以及与其他相关技术的结合应用等方面的内容。通过全面、系统地了解 HMR 插件的工作原理,能够更好地利用这一功能,为项目的成功开发提供有力保障。同时,要不断关注技术的发展动态,以便及时掌握最新的 HMR 技术和最佳实践。
|
算法 Java C语言
嵌入式系统:技术原理、应用与编程实践
嵌入式系统:技术原理、应用与编程实践
327 0
|
Web App开发 JSON JavaScript
Chrome 插件各模块之间的消息传递
Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输 插件和插件之间的信息传输 网页向插件进行信息传输 与原生应用进行消息传递
896 0
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
422 2
|
测试技术
专项测试常见流程
专项测试常见流程
252 0
|
测试技术 数据库
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)