随笔 - 176  文章 - 0  评论 - 18  阅读 - 11万

leetcode第37题--Count and Say

题目:(据说是facebook的面试题哦)

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.

题目好难理解,要不是看了别人的题目解释我真心不知道要想多久才知道它的意思。一开始我以为来一个数,将它表示为后面的形式就可以了。所以就写了个来一个数转换为读出的形式。然后自然是错了。

题目的意思是按照一定的规则出现数字,以字符串的形式。规定第一个是1,接下去就是按照前一个数的读法记录,所以第二个就是1个1,记录为11,那第三个就是对11的读法就是2个1,记录为21,第四个就是对21的读法,一个2一个1,记录为1211,一次类推估计应该知道什么意思了吧。Facebook出这样的题果然思维略叼啊。

leetcode把这题label为easy,题目都这么难理解起码medium啊哈哈。

在刚才错误的基础上,在加一个循环调用就可以了。即对 给定一个string后,输出它的读法 进行循环n次就得到n的答案了。如果n为零就输出“”。

复制代码
class Solution {
public:
    string getNext(string s)
    {
        if (s == "") return "1";
        string ans = "";
        int len = s.size(), cnt = 1; // 计数cnt初始为1,因为一旦出现一个数那至少是一次
        for (int i = 0; i < len; i++)
        {
            if (i+1 < len && s[i+1] == s[i])
            {
                cnt++;continue;
            }
            ans += cnt + '0'; // 和下面的s[i]要分开来加,否则会先进行字符串相加再到ans中
            ans += s[i];
            cnt = 1; //记录后记得将cnt恢复为1
        }
        return ans;
    }
    string countAndSay(int n) 
    {
        if (n == 0)
            return "";
        string ans = "";
        for (int i = 0; i < n; ++i) // 重复找n次next的就可以了
            ans = getNext(ans);
        return ans;
    }
};
复制代码

 

posted on   higerzhang  阅读(1646)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· Tinyfox 简易教程-1:Hello World!
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示