码迷,mamicode.com
首页 > 其他好文 > 详细

Count and Say

时间:2014-08-13 14:20:26      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   ar   问题   div   

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.

分析:Count and Say的意思就是对于(n-1)th string,从左到右,count连续相同数字并且say,所以解决此问题的关键是得到第(n-1)个string,并且从左到右统计连续相同数字的个数并将结果存储在一个string中。既可以用递归也可以用迭代。

递归代码如下:

 1 class Solution {
 2 public:
 3     string countAndSay(int n) {
 4         string res;
 5         if(n <= 0) return res;
 6         if(n == 1) res = "1";
 7         else{
 8             string last = countAndSay(n-1);
 9             int count = 0;
10             char pre =  , cur =  ;
11             
12             for(int i = 0; i < last.length(); i++){
13                 cur = last[i];
14                 if(pre != cur) {
15                     if(i > 0){
16                         res.push_back(0+count);
17                         res.push_back(pre);
18                     }
19                     count = 1;
20                 }else count++;
21                 pre = cur;
22             }
23             //push back last character
24             res.push_back(0+count);
25             res.push_back(cur);
26         }
27         return res;
28     }
29 };

在上面的代码中,是用pre和cur是否相等来判断是否是连续相同数字的,当pre与cur不同时,将pre的统计结果加入到result中。在这里需要注意cur是第一个和最后一个的情况。当cur是第一个时, pre 不等于 cur,但这时并不能将cur的统计结果加到res string中。当cur是最后一个时,因为cur后面没有字符,所以在for循环结束后需要将最后一个字符的统计结果加入到res string中。

迭代版代码:

 1 class Solution {
 2 public:
 3     string countAndSay(int n) {
 4         string res;
 5         if(n <= 0) return res;
 6         string pre = "1";
 7         res="1";
 8         for(int i = 2; i <= n; i++){
 9             char cpre =  , ccur =  ;
10             int count = 0;
11             pre = res;
12             res.clear();
13             for(int j = 0; j < pre.length(); j++){
14                 ccur = pre[j];
15                 if(cpre != ccur){
16                     if(j > 0){
17                         res.push_back(0+count);
18                         res.push_back(cpre);
19                     }
20                     count = 1;
21                 }else count++;
22                 cpre = ccur;
23             }
24             res.push_back(0+count);
25             res.push_back(ccur);
26         }
27         return res;
28     }
29 };

 

Count and Say,布布扣,bubuko.com

Count and Say

标签:style   blog   color   io   for   ar   问题   div   

原文地址:http://www.cnblogs.com/Kai-Xing/p/3909837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!