Leetcode第481题:神奇字符串(Magical string)

解题思路

根据题意,我们可以把 ss 看成是由「11 组」和「22 组」交替组成的,重点在于每组内的数字是一个还是两个,这可以从 ss 自身上知道。

构造到 ss 的长度达到 nn 时停止。

注意最后一次构造可能会填入两个数,导致 ss 的长度为 n+1n+1,因此最后统计 11 的个数时,应统计 ss 的前 nn 个数,而不是整个 ss。

核心代码:

class Solution {
public:
    int magicalString(int n) {
        string s = "\1\2\2"; // 值就是 1,2,2,这样就可以直接用 s[i] 当作个数
        for (int i = 2; s.length() < n; ++i)
            s += string(s[i], s.back() ^ 3); // 1^3=2, 2^3=1,这样就能在 1 和 2 之间转换
        return count(s.begin(), s.begin() + n, 1);
    }
};
posted @ 2022-10-31 21:21  hql5  阅读(55)  评论(0)    收藏  举报