题目:
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.
题解:
题目说的实在是太不明白了。。。
解释一下就是,输入n,那么我就打出第n行的字符串。
怎么确定第n行字符串呢?他的这个是有规律的。
n = 1时,打印一个1。
n = 2时,看n=1那一行,念:1个1,所以打印:11。
n = 3时,看n=2那一行,念:2个1,所以打印:21。
n = 4时,看n=3那一行,念:一个2一个1,所以打印:1211。
以此类推。(注意这里n是从1开始的)
所以构建当前行的字符串要依据上一行的字符串。“小陷阱就是跑完循环之后记得把最后一个字符也加上,因为之前只是计数而已。”
代码如下:
1 public String countAndSay(int n) {
2 if(n<=0)
3 return "";
4 String curRes = "1";
5 int start = 1;//从1开始算
6 while(start < n){
7 StringBuilder res = new StringBuilder();
8 int count = 1;
9 for(int j=1;j<curRes.length();j++){
10 if(curRes.charAt(j)==curRes.charAt(j-1))
11 count++;
12 else{
13 res.append(count);
14 res.append(curRes.charAt(j-1));
15 count = 1;
16 }
17 }
18 res.append(count);
19 res.append(curRes.charAt(curRes.length()-1));
20 curRes = res.toString();
21 start++;
22 }
23 return curRes;
24 }
2 if(n<=0)
3 return "";
4 String curRes = "1";
5 int start = 1;//从1开始算
6 while(start < n){
7 StringBuilder res = new StringBuilder();
8 int count = 1;
9 for(int j=1;j<curRes.length();j++){
10 if(curRes.charAt(j)==curRes.charAt(j-1))
11 count++;
12 else{
13 res.append(count);
14 res.append(curRes.charAt(j-1));
15 count = 1;
16 }
17 }
18 res.append(count);
19 res.append(curRes.charAt(curRes.length()-1));
20 curRes = res.toString();
21 start++;
22 }
23 return curRes;
24 }
Reference:http://blog.csdn.net/linhuanmars/article/details/20679963