【算法】LeetCode算法题-Count And Say
这是悦乐书的第153次更新,第155篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第12题(顺位题号是38)。count-and-say序列是整数序列,前五个术语如下:
1
11
21
1211
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的更多相关文章
- (算法)LeetCode刷题
LeetCode 56 合并区别 Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Count Binary Substrings(Java实现)
这是悦乐书的第293次更新,第311篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696).给定一个字符串s,计算具有相同数字0和1的非空且连续子串 ...
- LeetCode算法题-Count Primes(Java实现)
这是悦乐书的第190次更新,第193篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第49题(顺位题号是204).计算小于非负数n的素数的数量.例如: 输入:10 输出:4 ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Jewels and Stones(Java实现)
这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...
- LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)
这是悦乐书的第311次更新,第332篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762).给定两个正整数L和R,在[L,R]范围内,计算每个整数的 ...
- LeetCode算法题-Shortest Completing Word(Java实现)
这是悦乐书的第309次更新,第330篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第178题(顺位题号是748).从给定的字典单词中查找最小长度单词,其中包含字符串lic ...
随机推荐
- SPI 方式初始化 SD 卡总流程图(V2.0)
- Logback中使用TurboFilter实现日志级别等内容的动态修改
可能看到这个标题,读者会问:要修改日志的级别,不是直接修改log.xxx就好了吗?为何要搞那么复杂呢?所以,先说一下场景,为什么要通过TurboFilter去动态的修改日志级别.我们在使用Java开发 ...
- MySQL行转列
IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则 ...
- TypeScript学习(2)
自己动手敲代码的重要性不用多说.敲代码自然是参考TypeScript官方中文文档.编辑器推荐使用Visual Studio Code. Visual Studio Code 更新 更新完成之后很可能会 ...
- [面试]中高级测试工程师必备,月薪15K+
1.你的测试职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去.而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求 ...
- 2. 常见的Queue
package com.gf.conn013; import java.util.ArrayList; import java.util.Iterator; import java.util.List ...
- (4)Microsoft office Word 2013版本操作入门_插入图片及图片的排版
1.word中插入图片和文绕图 1.1插入图片 :点击[插入]-->[图片] 或者 [联机图片]从网上选择. 1.2文字环绕: [格式] --->点击[位置] .[自动换行] 进行图 ...
- Javascript删除数组里的某个元素
删除array数组中的某个元素,首先需要确定需要删除元素的索引值. ? 1 2 3 4 5 6 7 var arr=[1,5,6,12,453,324]; function indexOf(val){ ...
- 学用纯CSS3打造可折叠树状菜单
CSS执行顺序与优先权的问题其实就是一个冲突解决的问题,当同一个元素(或内容)被CSS选择符选中时,就要按照优先权取舍不同的CSS规则,这其中涉及到的问题其实很多.首先就是CSS规则的specific ...
- Django下自定义标签和过滤器
---恢复内容开始--- 第一步:确保setting中的INSTALL_APPS配置当前的app,要不然Django无法找到自定义的simple_tag. 第二步:在app中创建templatetag ...