Count and Say leetcode java

愛做飯的小瑩子發表於2014-08-04

題目

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 }

 Reference:http://blog.csdn.net/linhuanmars/article/details/20679963

相關文章