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;
        }
    };
  • 相关阅读:
    一卡通应用系统解决方案
    2013524 项目一
    射频RFID系统
    SIM操作系统
    python中eval, exec, execfile,和compile [转载]
    FastJSON学习
    坑爹的UICollectionView
    8位单片机编程的一些坑
    Android DownloadThread.run()学习
    蓝牙接收苹果手机通知 ANCS协议分析
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4114535.html
Copyright © 2011-2022 走看看