• Leetcode刷题--38.外观数列


    题目链接:https://leetcode-cn.com/problems/count-and-say/

    参考博客:https://www.cnblogs.com/flix/p/13166787.html

    题目描述:

    解题思路:

    理解一下题目的意思,外观数列是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。我们需要根据输入的n,输出外观数组的第n项(n从1开始)。

    使用迭代来做,以根据第三项21求第4项作为例子。首先设置当前的数字为2项的第一个字符2,以及当前数字2连续出现多少次cnt,初始化为1,然后开始循环,如果下一个数字也是2,则cnt++;否则,将2[cnt]放进对该项的描述当中([cnt]表示cnt的值,例如这里cnt为1,所以将“21”放入下一个项中),然后将下一个数字作为当前的数字,将cnt重置为1。这是求相邻两项的步骤,因为要求第n项,所以需要将上面的步骤循环n次。代码如下:

    class Solution {
    public:
        string countAndSay(int n) {
            string pre = "1"; // 前一个字符串
            for(int i=1; i<n; i++){
                string cur = "";  // 当前的字符串,用于描述前一个字符串
                char curNum = pre[0];  // 当前的字符
                int curNumCnt = 1;  // 当前字符的计数
                for(int j=1; j<pre.length(); j++){
                    if(pre[j]==curNum) curNumCnt++;
                    else{  
                        cur += to_string(curNumCnt)+curNum;//将cnt转化为字符串
                        curNum = pre[j];
                        curNumCnt = 1;
                    }
                }
                cur += to_string(curNumCnt); // 注意这两步别忘了
                cur.push_back(curNum);
                pre = cur;
            }
            return pre;
        }
    };

    注:

    这里用到了push_back()函数,c++中push_back()函数的用法

    函数将一个新的元素加到vector的最后面,位置为当前的最后一个元素的下一个元素

    push_back()在Vector的最后添加一个元素(参数为要插入的值)

    //在vec尾部添加10
    vector<int> vec;
    vec.push_back(10);
    //在容器中添加10
    int num = 10;
    vector<int> vec;
    vec.push_back(num);

    或者在string中最后插入一个字符:

    string str;
    str.push_back('d');

    类似的:

    pop_back() //移除最后一个元素

    clear() //清空所有元素

    empty() //判断vector是否为空,如果返回true则为空

    erase() //删除指定元素

  • 相关阅读:
    GridView自定义分页
    intro
    ListView和DataPager初试
    在DataGrid中,如何录入数量及单价的时候自动算出金额
    常用正则表达式
    ASP.NET中基类页的设计和使用
    Asp.net实现无刷新检测用户名
    在asp.net2.0中使用存储过程
    .NET中的抽象工厂
    用C#生成随机中文汉字验证码的基本原理 [转]
  • 原文地址:https://www.cnblogs.com/lbwBH/p/14492046.html
Copyright © 2020-2023  润新知