【LeetCode-面试算法经典-Java实现】【038-Count and Say(计数和表述)】
2015-07-28 05:59
696 查看
【038-Count and Say(计数和表述)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
1is read off as
"one 1"or
11.
11is read off as
"two 1s"or
21.
21is read off as
"one 2, then one 1"or
1211.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
题目大意
n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。解题思路
第一种情况:n<0时返回null。第二种情况:当n=1时,返回
1
第三种情况:当n>1时,假设n-1返回的字符串是s,对s的串进行处理理,对不同的数字进行分组比如112365477899,分成11,2,3,6,5,4,77,8,99。最有就2个1,1个2,1个3,1个6,1个5,一个4,2个7,1个8,2个9,就是211213161614271829,返回此结果。
代码实现
算法实现类public class Solution { public String countAndSay(int n) { if (n < 1) { return null; } String result = "1"; for (int i = 2; i <=n ; i++) { result = countAndSay(result); } return result; } public String countAndSay(String str) { StringBuilder builder = new StringBuilder(128); int count = 1; for (int i = 1; i < str.length(); i++) { if (str.charAt(i) == str.charAt(i - 1)) { count++; } else { builder.append(count); builder.append(str.charAt(i - 1)); count = 1; } } builder.append(count); builder.append(str.charAt(str.length() - 1)); return builder.toString(); } }
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。特别说明
欢迎转载,转载请注明出处【/article/1343426.html】
相关文章推荐
- php面试题1
- 黑马程序员——11,多线程,同步函数,死锁,一些零散的小知识点
- 最牛的程序员编程讨论
- 前端开发面试知识点大纲
- 黑马程序员——自学总结(六)反射
- 乐观的程序员们
- 程序员是如何一步步走向平庸的?
- 为什么程序员也能成为伟大的CEO
- 程序员修炼指南——引导你成为真正的编程高手
- android面试题总结02 在android中本地写入一个xml文件
- [黑马程序员](第50天)一些平时刷的题(3)
- [黑马程序员](第45天)一些平时刷的题(2)
- [黑马程序员](第40天)一些平时刷的题
- [黑马程序员](第17)异常
- [黑马程序员](第37天)今晚敲的一些代码题
- [黑马程序员](第25天)高新技术之正则表达式
- 【剑指Offer面试题】 九度OJ1390:矩形覆盖
- 程序员的能力拓展模型
- [黑马程序员](第1-5天)基础部分
- 黑马程序员--JAVA<反射>