Leetcode 89. Gray Code
Posted zhangwj0101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 89. Gray Code相关的知识,希望对你有一定的参考价值。
Question
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
Note:
For a given n, a gray code sequence is not uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
Code
非递归
public List<Integer> grayCode(int n)
List<Integer> results = new ArrayList<>();
results.add(0);
if (n > 0)
results.add(1);
int mask = 1;
for (int i = 2; i <= n; i++)
mask <<= 1;
for (int j = results.size() - 1; j >= 0; j--)
int t = results.get(j).intValue();
results.add(t | mask);
return results;
递归
public List<Integer> grayCode2(int n)
if (n == 0)
return Arrays.asList(0);
List<Integer> results = new ArrayList<>();
List<Integer> res = grayCode2(n - 1);
results.addAll(res);
int mask = 1 << (n - 1);
for (int j = res.size() - 1; j >= 0; j--)
int t = res.get(j).intValue();
results.add(t | mask);
return results;
以上是关于Leetcode 89. Gray Code的主要内容,如果未能解决你的问题,请参考以下文章