这是悦乐书的第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. Go基础系列:import导包和初始化阶段

    import导入包 搜索路径 import用于导入包: import ( "fmt" "net/http" "mypkg" ) 编译器会根据 ...

  2. Python正则进阶

    目录 1.Python正则表达式模块 1.1 正则表达式处理字符串主要有四大功能 1.2 Python中re模块使用正则表达式的两种方法 1.3 正则表达式对象的常用方法 1.4 匹配对象的属性与方法 ...

  3. springboot用户登陆密码两次md5加密

    1.用户端:PASS = MD5(明文 + 固定salt) 2.服务端:PASS = MD5(用户输入 + 随机salt) 引入依赖包 <dependency> <groupId&g ...

  4. 【Java每日一题】20170303

    20170302问题解析请点击今日问题下方的“[Java每日一题]20170303”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  5. WarShall算法

    1.引言 图的连通性问题是图论研究的重要问题之一,在实际中有着广泛的应用.例如在通信网络的联通问题中,运输路线的规划问题等等都涉及图的连通性.因此传递闭包的计算需要一个高效率的算法,一个著名的算法就是 ...

  6. Netty实战二之自己的Netty应用程序

    接下来我们将展示如何构建一个基于Netty的客户端和服务器,程序很简单:客户端将消息发送给服务器,而服务器再将消息回送给客户端,这将是一个对你而言很重要的第一个netty的实践经验. 1.设置开发环境 ...

  7. Linux下Python安装完成后如何使用pip命令

    一.很多读者Python安装完成之后,想要下载相关的包,例如:numpy.pandas等Python中这些基础的包,但是,发现pip根本用不了,主要表现在一下几种情况: 二.出现这种情况其实并不意外, ...

  8. C#时间、日期 的操作

    原文地址:http://zhidao.baidu.com/link?url=q-0No1LWfdyqQKFBg8RN5h0K-X0VygSbFI4sR8lBPwDExkIIzXQivyMKqX7V1y ...

  9. osx安装sass

    1.安装ruby (1)OS X 缺少的套件管理工具 homebrew 的安装 http://brew.sh/index_zh-tw.html (2)通过homebrew安装ruby // 到文件夹 ...

  10. [待优化笔记]原生JS实现验证框架 checkFun

    ;(function(){ /** 验证框架 checkFun * 使用方法: * <input class="required" type="text" ...