<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    格雷碼

    Posted on 2013-05-20 21:09 小明 閱讀(2582) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)結(jié)構(gòu)和算法
    問題格雷碼是一個二進制的編碼系統(tǒng),相鄰的兩個數(shù)只有一位是不同的。
    給定一個非負的整數(shù)n,代表了格雷碼的位的總數(shù)。輸出格雷碼的序列,這個序列必須以0開始。

    比如,給定n=2,輸出[0,1,3,2],格雷碼是
    0 = 00
    1 = 01
    3 = 11
    2 = 10

    注:格雷碼的序列并不是唯一,比如n=2時,[0,2,3,1]也滿足條件。


    分析:
    格雷碼的序列中應包含2^n個數(shù)。這個問題初看起來不容易,我們要想出一個生成方法。

    對于n=2,序列是:
    00,01,11,10
    那對于n=3,如何利用n=2的序列呢?一個方法是,先在n=2的四個序列前加0(這其實是保持不變),然后再考慮把最高位變成1,只需要把方向反過來就可以了
    000,001,011,010
    100,101,111,110-> 110,111,101,100
    把這兩行合起來就可以得到新的序列。

    想通了,寫代碼就很容易了。

    public class Solution {
        public ArrayList<Integer> grayCode(int n) {
            ArrayList<Integer> result = new ArrayList<Integer>();
            result.add(0);
            if(n>0){
                result.add(1);
            }
            
            int mask = 1;
            for(int i=2;i<=n;++i){
                mask *= 2;
                for(int j=result.size()-1;j>=0;--j){
                    int v = result.get(j).intValue();
                    v |= mask;
                    result.add(v);
                }
            }
            return result;
        }
    }
    主站蜘蛛池模板: 色吊丝永久在线观看最新免费| 中文字幕在线免费| 亚洲第一视频在线观看免费| 亚洲一级毛片免费观看| 国产人成免费视频| 久久久久久亚洲AV无码专区 | 久久久久久亚洲精品| 亚洲精品色播一区二区| 麻豆高清免费国产一区| 国产亚洲精品福利在线无卡一| 亚洲欧洲日本在线观看| 精品无码AV无码免费专区| 日韩精品一区二区亚洲AV观看| 亚洲一区二区三区免费在线观看| 亚洲精品人成网在线播放影院| 在线a毛片免费视频观看| 麻豆亚洲AV永久无码精品久久| 四虎在线最新永久免费| 亚洲人成77777在线播放网站不卡| 国产精品极品美女免费观看| 亚洲一级免费毛片| 最近2019中文字幕免费直播| 亚洲一区二区无码偷拍| 免费观看美女用震蛋喷水的视频| 国产日本亚洲一区二区三区| 天天影院成人免费观看| jzzijzzij在线观看亚洲熟妇| 最近中文字幕免费mv视频7| 亚洲成人免费在线观看| 91福利视频免费观看| 亚洲日韩国产精品乱-久| 亚洲伊人成无码综合网 | 免费va在线观看| 亚洲av日韩av永久无码电影| 女人与禽交视频免费看| g0g0人体全免费高清大胆视频| 久久久亚洲AV波多野结衣| 99久久精品国产免费| 久久久久亚洲AV无码观看| 日韩一级免费视频| 黄色免费网站在线看|