LeetCode – Gray Code (Java)

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

Java Solution

```public List<Integer> grayCode(int n) { if(n==0){ List<Integer> result = new ArrayList<Integer>(); result.add(0); return result; }   List<Integer> result = grayCode(n-1); int numToAdd = 1<<(n-1);   for(int i=result.size()-1; i>=0; i--){ result.add(numToAdd+result.get(i)); }   return result; }```
Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• Swapnil Kumar

public class Solution {
public List grayCode(int n) {
List result = new ArrayList();
result.add(0);
for(int j = 1; j <=n ; j++){
int numToAdd = 1 <=0 ; i–){
result.add(result.get(i)+numToAdd);
}
}
return result;
}
}

• Anwesha Bhattacharya

``` public List grayCode(int n) { HashMap map = new HashMap(); ArrayList code = new ArrayList(); map.put(0, 0); code.add(0); search(n, (int)Math.pow(2, n) - 1, 0, map, code); return code; }```

``` public static void search(int n, int remain, int N, HashMap map, ArrayList code) { if (remain == 0) return; int originalN = N; for (int i = 0 ; i < n ; i++) { if ((N & (1 << i)) == (1 << i)) N = N - (1 << i); else N = N + (1 << i); ```

```if (!map.containsKey(N)) { map.put(N, N); code.add(N); remain--; search(n, remain, N, map, code); break; } N = originalN; } }```

• Anwesha Bhattacharya

`Some code`

• William Kuo

My answer, run in O(n log n)

• William Kuo

public List grayCode(int n) {
HashMap map = new HashMap();
ArrayList code = new ArrayList();
map.put(0, 0);
code.add(0);
search(n, (int)Math.pow(2, n) – 1, 0, map, code);
return code;
}

public static void search(int n, int remain, int N, HashMap map, ArrayList code) {
if (remain == 0) return;
int originalN = N;
for (int i = 0 ; i < n ; i++) {
if ((N & (1 << i)) == (1 << i))
N = N – (1 << i);
else
N = N + (1 << i);

if (!map.containsKey(N)) {
map.put(N, N);
code.add(N);
remain–;
search(n, remain, N, map, code);
break;
}
N = originalN;
}
}

• Harshad Sathe

What is the time complexity of this algorithm?