題目:
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