Gray Code

    题意是生成N位长的格雷码。格雷码是一种二进制的数值表示方法,两个连续值只有1位不同。例如,输入n=2,返回[0, 1, 3, 2]。对应的格雷码是这样的:

00 - 0
01 - 1
11 - 3
10 – 2
vector<int> grayCode(int n) 
{
    vector<int> vecRet;
    stack<int> s;
    
    if (n <= 0) return vector<int>(1, 0);
    
    vecRet.push_back(0);
    vecRet.push_back(1);
    
    for (int i = 1; i < n; ++i)
    {
        int mask = 1 << i;
        
        for (vector<int>::const_iterator it = vecRet.begin();
            it != vecRet.end();
            ++it)
        {
            s.push(*it | mask);
        }
 
        while (!s.empty())
        {
            vecRet.push_back(s.top());
            s.pop();
        }
    }
    
    return vecRet;
}
posted @ 2012-09-16 23:25  紫红的泪  阅读(887)  评论(0编辑  收藏  举报