<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无码偷窥| 成人毛片100免费观看| 亚洲人精品午夜射精日韩| 中文字幕乱码系列免费| 亚洲AV中文无码乱人伦下载| 特级做A爰片毛片免费看无码| 亚洲AV无码精品色午夜果冻不卡| 在线涩涩免费观看国产精品 | 又黄又爽无遮挡免费视频| 污网站免费在线观看| 亚洲国产精品视频| AAAAA级少妇高潮大片免费看| 亚洲人色婷婷成人网站在线观看| 亚洲免费观看视频| 亚洲春色在线观看| 久久久久久99av无码免费网站| 亚洲av永久无码天堂网| 免费久久精品国产片香蕉| 羞羞视频免费网站在线看| 久久久久亚洲AV无码专区体验| 99精品免费观看| 亚洲精品天堂成人片AV在线播放| 免费中文字幕在线观看| 成人影片一区免费观看| 国产v亚洲v天堂a无| 亚洲AV成人精品日韩一区18p| a级毛片免费全部播放无码| 亚洲第一永久在线观看| 美女黄网站人色视频免费国产 | 亚洲福利一区二区| 日本免费v片一二三区| 亚洲精品第一国产综合精品99 | 999zyz**站免费毛片| 亚洲国产精品成人综合久久久| 女人被免费视频网站| 成人无码WWW免费视频| 国产亚洲精品成人AA片| 亚洲一区无码中文字幕|