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() //删除指定元素

原文地址:https://www.cnblogs.com/lbwBH/p/14492046.html