# Description

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.

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

``````00 - 0
01 - 1
11 - 3
10 - 2
``````

The original problem is here.

The original code is here.

# My Solution

I solve this problem in C++, as below:

``````/*
*Gray Code
*Author: shuaijiang
*Email: zhaoshuaijiang8@gmail.com
*/
#include<iostream>
#include<vector>
#include[itex]
#include<stdlib.h>
using namespace std;

class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result;
if(n<0)
return result;

result.push_back(0);
if(n==0)
return result;
result.push_back(1);
if(n==1)
return result;

for(int i=2;i<=n;i++){
int size = result.size();
for(int j=size-1;j>=0;j--){
int num = result[j] + addNum;
result.push_back(num);
}
}
return result;
}
};
``````

# Note

The Gray Code of n contains two parts: One part is the codes which add 0 to front of all codes of n-1; The other part is the codes which add 1 to front of all codes of n-1 in the reverse order.

For example, when n=2, the Grad code is

``````00 - 0
01 - 1
11 - 3
10 - 2
``````

So, when n=3, the Gray code is

``````000 - 0
001 - 1
011 - 3
010 - 2

110 - 6
111 - 7
101 - 5
100 - 4
``````