LeetCode 89 格雷編碼 C語言

2021-09-22 12:53:01 字數 1248 閱讀 5298

/*

* 演算法思想:

* 使用遞迴的思想,求n位grey碼,將其轉化為n-1位的grey碼。

* 一位:0 兩位: 01 三位:001

* 1 00 000

* 10 010

* 11 011

* 111

* 110

* 100

* 101

*/ #define len 0xffff

#define num_len 32

/* 遞迴函式,用於獲取grey碼 */

void get_ans(char **ret, int *ret_index, int index)

/* 對於index位的grey碼,需要先求出index-1位的grey碼,因此遞迴呼叫該函式,引數位數為index-1 */

get_ans(ret, ret_index, index-1);

/* 以為**為基於index-1位grey碼,得出index位grey碼 */

/* set first half exist */

int i;

for(i=((*ret_index)-1); i>=0; i--)

int cnt = (*ret_index-1);

/* 複製前一半數目的grey碼,並且最後一位設定為1 */

for(i=cnt; i>=0; i--)

}/* 將字串轉化為整數 */

int get_num(char *s)

return ret;

}int* graycode(int n, int* returnsize)

/* 呼叫遞迴函式獲取grey碼以及總個數,使用字串儲存 */

get_ans(ret, &ret_index, n);

int *ans = (int *)malloc(sizeof(int) * ret_index);

int i;

for(i=0; ifree(ret);

*returnsize = ret_index;

return ans;

}

LeetCode 89 格雷編碼 C

題目描述 格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯...

Leetcode 89 格雷編碼

格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,0,...

LeetCode89 格雷編碼

格雷編碼是乙個二進位制數字系統,在該系統中,兩個連續的數值僅有乙個位數的差異。給定乙個代表編碼總位數的非負整數 n,列印其格雷編碼序列。格雷編碼序列必須以 0 開頭。示例 1 輸入 2 輸出 0,1,3,2 解釋 00 0 01 1 11 3 10 2 對於給定的 n,其格雷編碼序列並不唯一。例如,...