题目
报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示: 1, 11, 21, 1211, 111221, … 1 读作 “one 1” -> 11. 11 读作 “two 1s” -> 21. 21 读作 “one 2, then one 1” -> 1211. 给定一个整数 n, 返回 第 n 个顺序。 注意事项 整数的顺序将表示为一个字符串。
样例
给定 n = 5, 返回 “111221”.
分析
想得到下一个数是多少,首先要循环当前数,在循环的同时对相同的数进行计数,当碰到两个数不同时进行字符串拼接(数目+当前数),计数置为1。
代码
public class Solution {
/**
* @param n the nth
* @return the nth sequence
*/
public String
countAndSay(
int n) {
String s =
"1";
int i =
1;
while (i < n){
s = count(s);
i ++;
}
return s;
}
public String
count(String a){
char[] chars = a.toCharArray();
int num =
1;
StringBuffer buffer =
new StringBuffer();
for(
int i =
1; i < chars.length ; i++){
if (chars[i-
1] == chars[i]){
num++;
}
else {
buffer.append(num + String.valueOf(chars[i-
1]));
num =
1;
}
}
buffer.append(num + String.valueOf(chars[chars.length -
1]));
return buffer.toString();
}
}
题目地址:http://www.lintcode.com/zh-cn/problem/count-and-say/