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