[LeetCode32]Gary Code

来源:互联网 发布:全球云计算排名 编辑:程序博客网 时间:2024/04/26 03:22

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 - 001 - 111 - 310 - 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.

Analysis:

Accordig to the definition of Gray Code, there is a rule about its generation.

00
01
11
10

如果生成n=3就是把n=2的向下翻折

10
11
01
00
最前面一位加上1.

Java

public ArrayList<Integer> grayCode(int n) {        ArrayList<Integer> result = new ArrayList<Integer>();        result.add(0);        for(int i=0; i<n; i++){        int highestBit = 1<<i;        int len = result.size();        for(int j=len-1; j>=0; j--)        result.add(highestBit + result.get(j));        }        return result;    }
c++

vector<int> grayCode(int n) {    vector<int> result;    result.push_back(0);    for(int i=0; i<n;i++){        int highest = 1<<i;        int len = result.size();        for(int i=len -1; i>=0; i--){            result.push_back(highest+result[i]);        }    }    return result;}




0 0
原创粉丝点击