首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。