/*
* 演算法思想:
* 使用遞迴的思想,求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,其格雷編碼序列並不唯一。例如,...