【LEET-CODE】38. Count and Say

Question:

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.

思路:

题意比较难理解,大致意思就是对上一个序列进行查数:

n=1时,序列为:1;

n=2时,序列为:11;(一个"1")

n=3时,序列为:21;(两个“1”)

n=4时,序列为:1211;(一个“2”,两个“1”)

n=5时,序列为:111221;(一个“1”,一个“2”,两个“1”)

n=6时,序列为:312211;(三个“1”,两个“2”,一个“1”)

这里也可以用迭代,我用的循环;

如果第j个数和第j+1个数相等,则cout计数加一,否则输出cout和第j个数并重新计数。

注意

new_sequence.push_back(cout+'0');

int转string类型,int变量不能直接放到string中,要用一些转换方法,如利用char 和sprintf,sstream流等。

Code:

class Solution {
public:
    string countAndSay(int n) {
        if(n==0) return "";
        if(n==1) return "1";
        string sequence = "1";
        string new_sequence;
        int cout = 1;
        for(int i = 1 ;i < n; i++){
            for(int j = 0; j < sequence.size();j++){
                if(j == sequence.size()-1){
                    new_sequence.push_back(cout+'0');
                    new_sequence += sequence[j];
                    break;
                }
                else if(sequence[j]==sequence[j+1]){
                    cout++;
                }
                else{
                    new_sequence.push_back(cout+'0');
                    new_sequence += sequence[j];
                    cout =1;
                }
            }
            if(!new_sequence.empty()) sequence = new_sequence;
            new_sequence.clear();
            cout =1;
        }
        return sequence;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探险家小扣的行动轨迹,都将保存在记录仪中。expeditions[i] 表示小扣第 i 次探险记录,用一个字符串数组表示。其中的每个「营地」由大小写字母组成,通过子串 -> 连接。例:"Leet->code->Campsite",表示到访了 "Leet"、"code"、"Campsite" 三个营地。expeditions[0] 包含了初始小扣已知的所有营地;对于之后的第 i 次探险(即 expeditions[i] 且 i > 0),如果记录中包含了之前均没出现的营地,则表示小扣 新发现 的营地。 请你找出小扣发现新营地最多且索引最小的那次探险,并返回对应的记录索引。如果所有探险记录都没有发现新的营地,返回 -1。注意: 大小写不同的营地视为不同的营地; 营地的名称长度均大于 0。用python实现。给你几个例子:示例 1: 输入:expeditions = ["leet->code","leet->code->Campsite->Leet","leet->code->leet->courier"] 输出:1 解释: 初始已知的所有营地为 "leet" 和 "code" 第 1 次,到访了 "leet"、"code"、"Campsite"、"Leet",新发现营地 2 处:"Campsite"、"Leet" 第 2 次,到访了 "leet"、"code"、"courier",新发现营地 1 处:"courier" 第 1 次探险发现的新营地数量最多,因此返回 1。示例 2: 输入:expeditions = ["Alice->Dex","","Dex"] 输出:-1 解释: 初始已知的所有营地为 "Alice" 和 "Dex" 第 1 次,未到访任何营地; 第 2 次,到访了 "Dex",未新发现营地; 因为两次探险均未发现新的营地,返回 -1
04-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值