LeetCode-38. Count and Say-思路详解-C++

来源:互联网 发布:龙bt发布永久域名 编辑:程序博客网 时间:2024/05/22 17:31

题目

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,11,21,1211,111221,…

1 读成1个1,或者11
11 读成两个1,或者21
21 读成一个2,一个1,或1211
给定一个整数,产生第n个序列。

思路

可以看出,第i个序列和第i-1个序列有关,即对第i-1个序列的解读。第一个序列为1,然后依次向后解读即可。
所以核心是解读函数。

1,对于第i个序列,则对第i-1个序列A进行遍历,将第一个值作为标记值。
2,如果A[i] == flag,则计数加一
3,如果不同,则保存计数结果,和该数。然后更新标记值以及计数值。然后接着遍历。

代码

class Solution {public:    string countAndSay(int n) {        string res = "1";        for(int i = 1; i < n;i++){            string tmp = "";            int cnt = 0;            char s = res[0];            int j = 0;            int len = res.size();            while(j < len){                if(res[j] != s){                    tmp += to_string(cnt);                    tmp += s;                    s = res[j];                    cnt = 1;                }else{                    cnt++;                }                if(j == len-1){                    tmp += to_string(cnt);                    tmp += s;                }                j++;            }            res = tmp;        }        return res;    }};
0 0
原创粉丝点击