2015年秋季騰訊校園招聘開發崗筆試題 四道大題之一

1.      在一組數的編碼中,若任意兩個相鄰的代碼只有一位二進制數不同,則稱這種編碼爲格雷碼( Gray Code )。請編寫一個函數,使用遞歸方法生成 N 位的格雷碼,並且保證這個函數的健壯性。

這是一道leetcode的原題https://leetcode.com/problems/gray-code/,關於二進制數i對應的格雷碼j有如下關係j=i^(i>>1);

比較簡單,非遞歸代碼如下:

    vector<int> grayCode(int n) {
        vector<int> v;
        int num=1;
        for(int x=0;x<n;x++)
            num*=2;
        for(int i=0;i<num;i++)
            v.push_back(i^(i>>1));
        
        return v;
    }
遞歸代碼:
    vector<int> grayCode(int n) {
        vector<int> v;
        if(n==0)
            v.push_back(0);
        else if(n==1)
        {
            v.push_back(0);
            v.push_back(1);
        }
        else
        {
            v=grayCode(n-1);
            int x=v.size();
            for(int i=x;i<2*x;++i)
                v.push_back(i^(i>>1));
        }
        return v;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章