题目:给定一个整数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 else 23 { 24 sb.append(String.valueOf(count)); 25 sb.append(String.valueOf(last)); 26 count = 1; // 因此此时i位置的数已经是一个新的数了,所以count初值为1 27 if(i < len) 28 last = res.charAt(i); 29 } 30 } 31 return sb.toString(); 32 } 33 }
时间: 2024-11-06 21:51:55