Gray Code [leetcode]
來源:程序員人生 發(fā)布時間:2014-10-04 08:00:01 閱讀次數(shù):3701次
第一種方法是直接排列
以二進制為0值的格雷碼為第零項,第一項改變最右邊的位元,第二項改變右起第一個為1的位元的左邊位元,第三、四項方法同第一、二項,如此反復,即可排列出n個位元的格雷碼。
vector<int> grayCode(int n) {
vector<int> res;
res.push_back(0);
if (n == 0) return res;
res.push_back(1);
int total = 1 << n;
for (int i = 2;i < total; i+=2)
{
int j = 1;
while((res.back() & j) == 0)
j <<= 1;
j <<= 1;
res.push_back(res.back() ^ j);
res.push_back(res.back() ^ 1);
}
return res;
}
第二種方法是鏡射排列
vector<int> grayCode(int n) {
vector<int> res;
if (n == 0)
{
res.push_back(0);
return res;
}
res.push_back(0);
res.push_back(1);
for (int i = 2; i <= n; i++)
{
int s = 1 << (i-1);
for (int j = res.size() - 1; j >= 0; j--)
{
res.push_back(res[j] + s);
}
}
return res;
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈