【leetcode】89. 格雷编码

 

int* grayCode(int n, int* returnSize){
    int cnt=pow(2,n);
    *returnSize=cnt;
    int* arr=(int*)calloc(cnt,sizeof(int));
    int i, j, temp;
    int hash[10000]={0};
    hash[0]=1;
    for(i=1; i<cnt; i++){        
        for(j=0; j<31; j++){
            temp = ( arr[i-1]&(1 << j) )?-(1 << j) :(1 << j);
            if( hash[arr[i-1]+temp] ==0 ){
                hash[arr[i-1]+temp]++;
                arr[i]=arr[i-1]+temp;
                break;
            }
        }
    }    
    return arr;
}

 

posted @ 2020-12-13 20:22  温暖了寂寞  阅读(66)  评论(0编辑  收藏  举报