首页 > 代码库 > Leetcode38--->Count and Say

Leetcode38--->Count and Say

题目:给定一个整数n,求出第n个序列,序列规则如下:

举例:

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.

解题思路:

乍一看,感觉好难,因为我不知道第n数是什么,后来发现第2个数其实就是第一个数countAndSay的结果,依次类推,就可以得到第n个数的countAndSay了;

下面就是要看如何求一个数的countAndSay了:这个还是很简单的,记录第一个数字pre,然后看后面有几个数字和它相等,等到不相等的时候,就将数字和次数的组合加进结果;然后pre等于那个不相等的数字,继续计数,一次类推即可;

代码如下:

 1 public class Solution { 2     public String countAndSay(int n) { 3         if(n < 1) 4             return ""; 5         String res = "1"; 6         for(int i = 1; i < n; i++) 7         { 8             res = doCountAndSay(res); 9         }10         return res;11     }12     public String doCountAndSay(String res)13     {14         int count = 0;15         char last = res.charAt(0);16         StringBuffer sb = new StringBuffer();17         int len = res.length();18         for(int i = 0; i <= len; i++)  // i == len的时候,表示从某一个位置开始到结尾都是同一个数,因此还需要将结果加入结果集中19         {20             if(i < len && res.charAt(i) == last)21                 count ++;22             else23             {24                 sb.append(String.valueOf(count));25                 sb.append(String.valueOf(last));26                 count = 1;  // 因此此时i位置的数已经是一个新的数了,所以count初值为127                 if(i < len)28                     last = res.charAt(i);29             }30         }31         return sb.toString();32     }33 }

 

Leetcode38--->Count and Say