Leetcode: Gray Code

原題鏈接:https://leetcode.com/problems/gray-code/

我在github上的leetcode倉庫:https://github.com/cooljacket/leetcodes

題意

使用鏡像法構建格雷碼序列。

思路

參考維基百科的解釋,鏡像法如下圖所示:

有了上圖之後,可以看出,這其實是個很直觀的算法:
1. 從0開始;
2. 每次將上一步的倒過來複制一遍,然後把這部分目前的最高位置爲1,追加到原來的部分作爲下一步的輸入。

代碼

class Solution {
public:
    // 鏡像構建法很容易理解,就是每次對稱複製一遍,然後在後半部分的開頭的最高位“+1”
    // 注意n=0的情況是返回{0}
    vector<int> grayCode(int n) {
        vector<int> allCodes;
        allCodes.push_back(0);
        for (int i = 1; i <= n; ++i) {
            vector<int> mirror(allCodes.rbegin(), allCodes.rend());
            int mask = 1 << (i-1);
            for (int j = 0; j < allCodes.size(); ++j) {
                mirror[j] = mask | mirror[j];
            }
            allCodes.insert(allCodes.end(), mirror.begin(), mirror.end());
        }
        return allCodes;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章