## 89. Gray Code

The gray code is a binary numeral system where two successive values differ in **only one bit**.

Given an integer `n`

representing the total number of bits in the code, return * any sequence of gray code*.

A gray code sequence must begin with `0`

.

**Example 1:**

Input:n = 2Output:[0,1,3,2]Explanation:00 - 0 01- 111 - 3 10- 2 [0,2,3,1] is also a valid gray code sequence. 00 - 010 - 2 11- 301 - 1

**Example 2:**

Input:n = 1Output:[0,1]

**Constraints:**

`1 <= n <= 16`

## Rust Solution

```
struct Solution;
impl Solution {
fn gray_code(n: i32) -> Vec<i32> {
let mut res = vec![];
for i in 0..(1 << n) {
res.push(i ^ i >> 1);
}
res
}
}
#[test]
fn test() {
let n = 2;
let res = vec![0, 1, 3, 2];
assert_eq!(Solution::gray_code(n), res);
}
```

Having problems with this solution? Click here to submit an issue on github.