# Gray Code

## Gray Code

[原题链接](https://leetcode.com/problems/gray-code/)

### 描述

> The gray code is a binary numeral system where two successive values differ in only one bit.
>
> Given a non-negative integer *n* representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

### 例子

> Input: 2&#x20;
>
> Output: \[0,1,3,2]&#x20;
>
> Explanation:&#x20;
>
> 00 - 0&#x20;
>
> 01 - 1&#x20;
>
> 11 - 3&#x20;
>
> 10 - 2
>
> For a given n, a gray code sequence may not be uniquely defined. For example, \[0,2,3,1] is also a valid gray code sequence.
>
> 00 - 0&#x20;
>
> 10 - 2&#x20;
>
> 11 - 3&#x20;
>
> 01 - 1

### 解法

```cpp
class Solution {
public:
     vector<int> grayCode(int n) {
        vector<int>res(1,0);
        for(int i=0;i<n;i++){
            int size=res.size();
            for(int j=size-1;j>=0;j--){
                res.push_back(res[j]|1<<i);
            }
        }
        return res;
    }
};
```

[出处](https://leetcode.com/problems/gray-code/discuss/29891/Share-my-solution)

The middle two numbers only differ at their highest bit, while the rest numbers of part two are exactly symmetric of part one：\
Say the example input is 3.

0 000\
1 001\
3 011\
2 010

6 110\
7 111\
5 101\
4 100

For the pair of (2, 6), (3, 7), (1, 5) and (0, 4), the last 2 bits are the same. The only difference is 6,7,5 and 4 set the first bit on.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://celia-qian.gitbook.io/leetcode-notebook-2020-2021/linear-list/array/gray-code.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
