码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Solution-89

时间:2020-02-03 11:39:42      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:vector   span   ali   out   amp   递归   The   res   NPU   

89. Gray Code

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.

Example 1:

Input: 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2

For a given n, a gray code sequence may not be uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence.

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

Example 2:

Input: 0
Output: [0]
Explanation: We define the gray code sequence to begin with 0.
             A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.
             Therefore, for n = 0 the gray code sequence is [0].

思路
产生格雷码的方法有很多种,这里选取其中一种方法。采用递归的方式生成格雷码,方法是根据n-1位的格雷码产生n位的格雷码。具体操作为(2进制下):将n-1位的格雷码首位补零,然后按照前面格雷码的倒序接在后面,首位加1。
以n=2和n=3为例。

n=2      n=3
0 00     0 000
1 01     1 001 
3 11     3 011
2 10     2 010
         6 110
         7 111
         5 101
         4 100

这样转换为十进制后可以发现,n位格雷码与n-1位格雷码相比,前面一半的值不变,后面的值为前面顺序颠倒之后的值加上\(2^{n-1}\)

Solution:

vector<int> grayCode(int n) {
    vector<int> res(1, 0);
    for (int i = 0; i < n; i++) {
        int size = res.size();
        for (int j = size-1; j >= 0; j--) {
            res.push_back(res[j] + pow(2, i));
            //res.push_back(res[j]|1<<i);    //语法不太懂,暂时留着
        }
    }
    return res;
}

性能
Runtime: 4 ms??Memory Usage: 8.7 MB

LeetCode Solution-89

标签:vector   span   ali   out   amp   递归   The   res   NPU   

原文地址:https://www.cnblogs.com/dysjtu1995/p/12254774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!