leetcode笔记:Count and Say

一.题目描述

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…

根据题意,发现该题没有什么高级的技巧,代码中主要使用了stringstringstream,需要加入头文件#include <string>#include <sstream>,关于stringstringstream的用法,可参考: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();
    }
};

leetcode笔记:Count and Say_第1张图片

四.小结

需要好好学习一下stringstringstream的用法。

你可能感兴趣的:(LeetCode,Algorithm,C++,String,sstream)