Gray Code

本文介绍了一种生成N位长度格雷码的方法。格雷码是一种特殊的二进制数表示方式,相邻两个数只有一位不同。文中给出了一个C++实现的例子,通过迭代的方式生成指定长度的格雷码序列。

    题意是生成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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值