首页 > 代码库 > count-and-say的另一种错误理解
count-and-say的另一种错误理解
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41257397
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.11
is read off as "two 1s"
or 21
.21
is 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.
今天OJ可好几次,提交好几次都出错,最后才发现是自己把题目理解错了,回头想想就觉得好笑。
题目的意思是给定一个整数n,让你求出按照上面规律在执行若干次后所得到的串,其实该算法主要用到递归的思想。
例如n=1时输出“1”,n=2时输出“2”......
我却把题目意思错误地理解为:对于给定的整数n,对该整数n执行N次上述递归操作后得到的串。例如给定2,得到的结果是1112。
当我将给定整数设定为1000时,果断出现内存泄露,想想就觉得可怕。
按照:“对于给定的整数n,对该整数n执行N次上述递归操作后得到的串”的算法描述如下所示:
public class TestCountAndSay { private static String countAndSay; public static void main(String[] args) { countAndSay = countAndSay(12); System.err.println(countAndSay); } public static String countAndSay(int n) { String value = http://www.mamicode.com/String.valueOf(n);>题目真正的解法如下所示:
public static String countAndSay(int n) { if (n == 1) return "1"; String s = "1"; StringBuffer buffer = new StringBuffer(); //记录重复的值 int count = 0; // 迭代次数 int round = 0; int i; while (++round < n) { count = 1; buffer.setLength(0); for (i = 1; i < s.length(); i++) { // 重复的值,继续计数 if (s.charAt(i) == s.charAt(i - 1)) { count++; } else { // 有新的值出现,记录到buffer buffer.append(count).append(s.charAt(i - 1)); // 重置count count = 1; } } buffer.append(count).append(s.charAt(i - 1)); // 更新s s = buffer.toString(); } return buffer.toString(); }count-and-say的另一种错误理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。