題目: 在一組數的編碼中,若任意兩個相鄰的**只有一位二進位制數不同,則稱這種編碼為格雷碼(gray code
)。請編寫乙個函式,使用遞迴方法生成
n位的格雷碼,並且保證這個函式的健壯性。
思路:首先格雷碼有這樣的乙個特點就是更多一位的格雷碼是在前一位格雷碼前面加上0和1的,舉個例子就是1位的格雷碼有0和1,那麼2位的格雷碼就是在0前面加上0和1,在1前面加上0和1,也就是00,01,10,11,格雷碼的個數就是2……n,也就是後面**裡面的2《(n-1),即2左移n-1位。所以這裡就可以用遞迴來實現了。
package org.algorithm.pointoffer;
/* * 在一組數的編碼中,若任意兩個相鄰的**只有一位二進位制數不同,
* 則稱這種編碼為格雷碼(gray code)。請編寫乙個函式,
* 使用遞迴方法生成n位的格雷碼,並且保證這個函式的健壯性。
*/public class graycode else
} }
public static string creategraycode(int n)
public static void main(string args)
}}
這裡還有一點容易出錯,我開始就是這裡錯了,就是賦值gray的時候必須從陣列的最高位開始,也就是i必須從length-1開始,不然會把原gray覆蓋掉。
20190405騰訊後端開發崗筆試程式設計題
第一題 題目大意是 有很多種錢幣,每種可以無限用,然後給定乙個m,需要用這些錢幣來湊從1到m的數值的金額 感覺像數字dp,當時沒做出來,includeusing namespace std int a 101 int m,n int num int x return ans int main if ...
8 17騰訊筆試開發崗第二題
逆序對問題 簡介 先對字串做乙個部分翻轉,求得翻轉結果裡逆序串的個數 兩個數字之前前面數字比後邊大,組成乙個逆序串,如3,2,1中,3,1 2,1,分別是兩個逆序串 用例 第一行n 2 表示目標資料個數為2 n個 第二行 2 1 4 3 表示這個長度為4的資料串的各個值 第三行 4 做4次變換 第四...
騰訊2016秋招筆試程式設計題
有乙個由很多木棒構成的集合,每個木棒有對應的長度,請問能否用集合中的這些木棒以某個順序首尾相連構成乙個面積大於 0 的簡單多邊形且所有木棒都要用上,簡單多邊形即不會自交的多邊形。初始集合是空的,有兩種操作,要麼給集合新增乙個長度為 l 的木棒,要麼刪去集合中已經有的某個木棒。每次操作結束後你都需要告...