这是悦乐书的第153次更新,第155篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第12题(顺位题号是38)。count-and-say序列是整数序列,前五个术语如下:

  1. 1

  2. 11

  3. 21

  4. 1211

  5. 111221

1被读作“一个一”或者11。第二项的值是第一项的读法。

11被读作“两个一”或者21。第三项的值是第二项的读法。

21被读作“一个二,两个一”或者1211。第四项的值是第三项的读法。

给定整数n,其中1≤n≤30,生成count-and-say序列的第n项。整数序列的每个术语将表示为一个字符串。例如:

输入:1

输出:“1”

输入:4

输出:“1211”

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

第一步,界定n的范围,在1到30之间。

第二步,处理特殊情况,n为1的时候,可以直接返回字符串1。

第三步,通过题意,我们知道了n代表的字符串是n-1代表的字符串的读法,即n-1表示的字符串读法就是我们想要的答案。

第一层循环,从1开始循环,直到不小于n,并且接受内层循环的处理结果当做进入下一次循环的条件。

第二层循环,对初始值为“1”的previous字符串进行处理。

第三层循环,顺位判断该字符串每一位字符重复出现的次数,此循环至少会走一次,再将每个字符和其出现的次数拼接成字符串,最后将得到此字符串的读法。

public String countAndSay(int n) {
if (n > 30 || n < 0) {
return "";
}
if (n == 1) {
return "1";
}
String previous = "1";
for (int j = 1; j < n; j++) {
String str = "";
for (int i = 0; i < previous.length(); i++) {
char cc = previous.charAt(i);
int count = 0;
while (i < previous.length() && cc == previous.charAt(i)) {
count++;
i++;
}
i--;
str = str + count + cc;
}
previous = str;
}
return previous;
}

03 第二种解法

第一种解法用了三层循环,其实还可以简化下,变成两层循环,将内层的两个循环变成一个。先将字符串第一个字符作为初始条件放在外面,初始化记数为1,然后开始循环,从字符串索引1开始,判断第0位和第1位字符是否相等,相等count就加1,继续循环,如果不相等,拼接字符串,并将count还原为1,判断对象由第0位字符换成第1位字符,继续循环。

public String countAndSay2(int n) {
if (n > 30 || n < 0) {
return "";
}
if (n == 1) {
return "1";
}
String previous = "1";
for (int j = 1; j < n; j++) {
String str = "";
char c = previous.charAt(0);
int count = 1;
for (int i = 1; i < previous.length(); i++) {
char cc = previous.charAt(i);
if (cc == c) {
count++;
} else {
str = str + count + c;
count = 1;
c = cc;
}
}
str = str + count + c;
previous = str;
}
return previous;
}

04 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

【算法】LeetCode算法题-Count And Say的更多相关文章

  1. (算法)LeetCode刷题

    LeetCode 56 合并区别 Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就 ...

  2. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  3. LeetCode算法题-Count Binary Substrings(Java实现)

    这是悦乐书的第293次更新,第311篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696).给定一个字符串s,计算具有相同数字0和1的非空且连续子串 ...

  4. LeetCode算法题-Count Primes(Java实现)

    这是悦乐书的第190次更新,第193篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第49题(顺位题号是204).计算小于非负数n的素数的数量.例如: 输入:10 输出:4 ...

  5. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  6. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  7. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

  8. LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)

    这是悦乐书的第311次更新,第332篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762).给定两个正整数L和R,在[L,R]范围内,计算每个整数的 ...

  9. LeetCode算法题-Shortest Completing Word(Java实现)

    这是悦乐书的第309次更新,第330篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第178题(顺位题号是748).从给定的字典单词中查找最小长度单词,其中包含字符串lic ...

随机推荐

  1. python模块之shutil

    shutil是一个用于简化文件操作的模块. 复制文件(传入源文件对象和目标文件对象) import shutil f1 = open(r'/Users/jingxing/PycharmProjects ...

  2. zepto的构造器$

    在zepto中,通过$来构造对象 $ = function(selector, context){ return zepto.init(selector, context) } 由该函数,实际上,在调 ...

  3. [android] 显示意图激活另外一个activity

    可以使用跳转的方式类似javaweb来实现界面转换 显示意图就是必须要指定开启组件的具体信息,包名,组件名,组件的class 新建一个类TwoActivity ,继承Activity类,重写onCre ...

  4. cloudera manager 安装配置

    前面cloudera manager 环境准备和安装我参考的是: https://blog.csdn.net/m0_38017084/article/details/82218559 这篇博客,写的非 ...

  5. React.cloneElement

    作用: 克隆react element, 并传递props, 和children React.cloneElement( element, [props], [...children] ) // ch ...

  6. adb for mac

    1.Install homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas ...

  7. 2; HTML 基本结构

    1. HTML 的基本结构 2. HTML 控制标记的格式 3. 最常用的控制标记 本章讲解最基本的 HTML 元素,也就是创建文档结构所需的元素.例如:标题.段落. 页面分隔.注释等等. 2.1 H ...

  8. Android 底部导航栏实现一 Fragment-replace

    [效果](这里下载的软件收费的试用有水印) [推荐]这里推荐一个图标网http://iconfont.cn/.以上图标来自此图标网 [项目结构] [步骤] ①创建布局文件,写底部导航栏 <?xm ...

  9. 六. Redis发布订阅机制

    发布订阅(pub/sub)是一种消息通信模式,主要是解除消息发布者和消息订阅者之间通信的耦合. Redis作为一个pub/sub的服务器,在订阅者和发布者之间起到了一个消息路由的功能.订阅者可以通过s ...

  10. Mysql 自定义函数示例

    创建定义函数的的基本语法如下 # DELIMITER是用来设置边界符的 DELIMITER // CREATE FUNCTION 函数名(形参列表) RETURNS 返回类型 begin # 函数体 ...