公式表示: g[i] = b[i] ^ b[i+1](g:格雷碼,b:二進位製碼)
也就是第i位格雷碼等於當前二進位制位和前面更高為的異或。
那怎麼實現讓當前位和更高位異或呢?
第一種方法是先把所有的向左移,在把所有位同時異或。
假入我們要求10110(b)的格雷碼,我們可以通過先將它向左移1位,也就是先把高位降1位,這樣就可以直接通過10110 ^ 1011得到對應的格雷碼。
**實現
class
solution
return ans;
}}
第二種是對二進位製碼進行按位遍歷,逐個求出每一位格雷碼。
1位格雷碼有兩個碼字
(n+1)位格雷碼中的前2n個碼字等於n位格雷碼的碼字,按順序書寫,加字首0
(n+1)位格雷碼中的後2n個碼字等於n位格雷碼的碼字,按逆序書寫,加字首1
n+1位格雷碼的集合 = n位格雷碼集合(順序)加字首0 + n位格雷碼集合(逆序)加字首1
可以參考:格雷碼
**實現:
class
solution
public
void
code
(list
ans,
int head,
int n)
code
(ans, head <<
1, n -1)
;}}
只是將遞迴用遞推實現,和遞迴是一樣的思路。
**實現:
class
solution
head <<=1;
}return ans;
}}
m進製轉十進位制
題目描述 description 將m進製數n轉化成乙個十進位制數 m 16 題目保證轉換後的十進位制數 100 輸入描述 input description 共一行n和m 輸出描述 output description 共乙個數 表示m進製的n化成十進位制的數 樣例輸入 sample input ...
十六進製制轉十進位制
create function fn hextobinary hex varchar 8 returns varchar 255 asbegin declare base tinyint declare string varchar 255 declare return varchar 255 de...
十進位制轉十六進製制
問 題 描 述 十 六 進 制 數 是 在 程 序 設 計 時 經 常 要 使 用 到 的 一 種 整 數 的 表 示 方 式 它 有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 共 16 個符號,分別表示十進位制數的 0 15。十六進製制的計數方法是滿16 進 1,所以十進位制數...