leetcode 题解: Gray Code

时间:2021-05-14 17:14:30

第一眼看到就是枚举,回溯法。

n位的ans就是在n-1的ans的基础上,每一个在首位加上1。

但是有个难点,要保证相邻两数之间只有一位在变化,怎么办?

首先

00

00  01

00  01  11  10

本来是傻乎乎的,直接加的,没有保证只变化1位。

后来发现,从00到01是只变了1位,那么我们给01加上2呢?就变成11, 给00加上2就变成 10。

每次逆序加2^n-1,这样就保证了相邻只变一位。

说不清,基本是蒙对的。碰上了。上代码吧。

class Solution {
public:
vector<int> grayCode(int n) {
vector<int> ans; ans.push_back();
for(int i=;i<n;i++)
{
int len = ans.size();
for(int j = len-; j >=; j--)
{
ans.push_back(ans[j] + pow(,i));
}
}
return ans;
}
};