zoukankan      html  css  js  c++  java
  • leetcode[88] Gray Code

    题目:格雷码。

    格雷码是从0开始且之后两个相邻码之间只有一个符号不相同,例如000,100,101,111三个相邻之间只有一个二进制不同。

    现在给定一个数字n,然后给出格雷码所对应的数字。例如:

    For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

    00 - 0

    01 - 1

    11 - 3

    10 - 2

    左边一列是格雷码,右边一列是对应的需要输出的十进制。

    我们来观察一下格雷码的规律。如果是1那么是

    0

    1

    如果是2的时候,其实就是在0和1前面加0,再在1,0前面加1。

    3的时候就是把2的格雷码先加零,然后倒序前面加1,那么我们就可以按照这个规律

    000

    001

    011

    010

    110

    111

    101

    100

    知道怎么来的,而且如果记录的话就是从0开始,往后记,而且因为前面加零的大小是不变的,那么先加入一个0后,之后每次记录在前面加1的即可。那么可以如下:

    class Solution {
    public:
        vector<int> grayCode(int n) 
        {
            vector<int> ans;
            ans.push_back(0);
            
            for (int i = 0; i < n; ++i)
            {
                int left = 1<<i;
                int len = ans.size();
                for (int j = len-1; j >= 0; --j)
                    ans.push_back(left + ans[j]);
            }
            return ans;
        }
    };
  • 相关阅读:
    分布式系统中的Session问题
    HotSpot VM运行时---命令行选项解析
    K大数查询
    [DarkBZOJ3636] 教义问答手册
    小朋友和二叉树
    [COCI2018-2019#2] Sunčanje
    小SY的梦
    [HDU6722 & 2019百度之星初赛四 T4] 唯一指定树
    [HDU6800] Play osu! on Your Tablet
    [NOI2007] 货币兑换
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4114535.html
Copyright © 2011-2022 走看看