Count and Say

有这样一个序列:它的第一个数是1、之后的每一个数都将它前一个数的各位数字合并,形如212211(连续的两个1、之后是连续的两个2,最后是单独的一个1)的格式。

现要求给出一个自然数n,求出在这个序列第n位的数字。

 

这道题用到了一个简单的循环:

public String countAndSay(int n) {
	if (n <= 0)
		return null; //如果所给的n小于1直接返回null

	int i = 1;
	String result = "1";
	while (i < n) {
		StringBuilder sb = new StringBuilder(); //建立一个新的StringBuilder
		int count = 1; //计算同一数字重复次数
		for (int j = 1; j < result.length(); j++) { //当n小于3时不会执行循环
			if (result.charAt(j) == result.charAt(j - 1)) {
				count++;
			} else { //出现不同数字
				sb.append(count); //重复了多少次
				sb.append(result.charAt(j - 1)); //重复的是哪个数字
				count = 1; //重置计数器
			}
		}

		sb.append(count);
		sb.append(result.charAt(result.length() - 1));
		result = sb.toString(); //保存本次运算结果
		i++; //循环继续
	}
 
	return result; //返回结果
}

  

  

posted @ 2017-12-04 01:06  望山海  阅读(263)  评论(0编辑  收藏  举报