LeetCode481.神奇字符串

神奇字符串

神奇的字符串 S 只包含 ‘1’ 和 ‘2’,並遵守以下規則: 字符串 S 是神奇的,因爲串聯字符 ‘1’ 和 ‘2’
的連續出現次數會生成字符串 S 本身。 字符串 S 的前幾個元素如下:S = “1221121221221121122 …”
如果我們將 S 中連續的 1 和 2 進行分組,它將變成: 1 22 11 2 1 22 1 22 11 2 11 22 …
並且每個組中 ‘1’ 或 ‘2’ 的出現次數分別是: 1 2 2 1 1 2 1 2 2 1 2 2 …
你可以看到上面的出現次數就是 S 本身。 給定一個整數 N 作爲輸入,返回神奇字符串 S 中前 N 個數字中的 ‘1’ 的數目。

示例:

輸入:6
輸出:3
解釋:神奇字符串 S 的前 6 個元素是 “12211”,它包含三個 1,因此返回 3。

思路分析: 這道題關鍵是要明白字符串構造的規律。
規律‘1’,‘2’是交替添加,添加了‘1’後添加’2’,添加了’2’後添加’1’,如此循環,而添加的個數與這個字符串本身有關。
我們設下一次添加的爲flag
根據遍歷當前爲1?2,確定在末尾添加flag的個數

class Solution {
public:
    int magicalString(int n) {
        if (n < 1)
    {
        return  0;
    }
    vector<int> s;
    s.push_back(1);
    s.push_back(2);
    s.push_back(2);

    int flag = 1;
    for (int i = 2; i < n - 1; i++)
    {
        if (s[i] == 1)
        {
            s.push_back(flag);
        }
        else {
            s.push_back(flag);
            s.push_back(flag);
        }
        flag = flag == 1 ? 2 : 1;
    }
    int count = 0;
    for (int i = 0; i < n; i++)
    {
        if (s.at(i) == 1)
        {
            count++;
        }
    }
    return count;

    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章