您的位置:首页 > 其它

leetcode笔记:Count and Say

2015-09-14 09:09 639 查看
一.题目描述

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.

二.题目分析

题目的内容很多,其实就是根据一个数的读法,组合出下一个数,比如11,读作2(个)1,因此下个数是21;同理,21读作1(个)2、1(个)1,因此下个数是1211…

根据题意,发现该题没有什么高级的技巧,代码中主要使用了
string
stringstream
,需要加入头文件
#include <string>
#include <sstream>
,关于
string
stringstream
的用法,可参考:http://blog.csdn.net/xw20084898/article/details/21939811 。该程序只是实现了对题目要求的模拟,然后输出结果。

三.示例代码

#include <string>
#include <sstream>
using namespace std;

class Solution
{
public:
    string CountAndSay(int n)
    {
        string result = "1";

        while (--n)
            result = theNextStr(result);
        return result;
    }

private:
    string theNextStr(const string& str)
    {
        if (str.empty())
            return string();
        stringstream result;
        int strSize = str.size();
        int count = 1; // 计数

        for (int Index = 0; Index < strSize - 1; Index++)
        {
            if (str[Index] == str[Index + 1])
                count++;
            else
            {
                result << count << str[Index];
                count = 1;
            }
        }
        result << count << str[strSize - 1]; // 最后一位
        return result.str();
    }
};




四.小结

需要好好学习一下
string
stringstream
的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: