每日一题——神奇字符串

 思路:

这题的关键就是构造出这个神奇字符串s。很明显第一个数字1是由第一个数字1自己生成的,第二个数字2,是由第二个和第三个数字2生成的,此时我们将字符串初始化为"122",此时i=2,指向第二个2,接下来我们开始构造。这是利用vector进行操作会方便很多。

这里有个问题?

1.如何判断当前应该在容器中加入1还是2?

代码中的flag就是实现这个功能的,因为每次加入新的元素到容器中,容器最后的那个元素一定是上一次加入的元素,用3减去容器中国的最后一个元素,就可以交替得到1和2。(不要误以为是3减去s[i-1],因为当两个相邻元素相等时,很明显会出现错误)

知道要在容器中添加什么后,根据s[i]的值,得到添加的个数,直至将前n个元素填满。

使用count函数统计容器中1的个数。

class Solution {
public:
    int magicalString(int n) {
        vector<int>s={1,2,2};
        int i=2,flag=0;
        for(i;i<=n;i++){
            flag=3-s.back();
            for(int j=0;j<s[i];j++){
                s.emplace_back(flag);
            }
        }
        int cnt = count(s.begin(),s.begin()+n,1);
        return cnt;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值