vector<int> grayCode(int n)
{
vector<int> ans;
ans.push_back(0);
// 算法: 先将之前的序列取反,再把最高位弄成1即可
for (int i = 0; i < n; i++)
{
int len = ans.size();
for (int j = 0; j < len; j++)
{
ans.push_back(ans[len - j - 1] | (1 << i));
}
}
return ans;
}
基本思想就是把之前生成的序列取反,再把最高位弄成1。。。。
取反之后第i位与第len-i位是相等的,最高位弄成1就只差1位,又因为之前的序列本身就满足题意,所以这算法正确性无疑
好tm妙啊