LeetCode Solution-89

Posted littledy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Solution-89相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode.1024 视频拼接

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

LEETCODE 003 找出一个字符串中最长的无重复片段

Leetcode 763 划分字母区间

LeetCode:划分字母区间763

Leetcode:Task Scheduler分析和实现