Categories
木有技术

LeetCode 89. Gray Code

Divide and conquer!
Add a leading 0 or 1 bit to your existing results so here comes two sub-results: 0{xxxxx} and 1{xxxxx}. How to merge them? Just keep the first sub group and append the second group items reversely so that there is only a 1-bit difference between the end of group 0 and “start” of group 2.

class Solution {
public:
    vector<int> grayCode(int n) {
        if (n == 0)
            return { 0 };
        vector<int> results = { 0, 1 };
        for (size_t i = 1; i < n; ++i)
        {
            for (int j = results.size() - 1; j >= 0; --j)
            {
                results.push_back(results[j] + (1 << i));
            }
        }
        return results;
    }
};

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.