class Solution {
public:
vector<int> grayCode(int n) {
vector<int> vi;
vi.push_back(0);
for (int i = 0; i < n; ++i) {
int m = vi.size();
while (m--) {
vi.push_back(vi[m] | (1 << i));
}
}
return vi;
}
};