leetcode算法題總結之Counting Bits

題目介紹:

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.

Example:
For num = 5 you should return [0,1,1,2,1,2].

一開始看到這個題的時候,還有點迷,不知道該如何下手,這種情況下只能採用枚舉的方式找規律。準確說這是一道典型按位運算的題目,位運算符包括了& | 等。

我的解法:

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* countBits(int num, int* returnSize) {
    int i;
    int * arry;
    arry=(int*)malloc(sizeof(int)*(num+1));
    *returnSize=num+1;
    arry[0]=0;
    for(i=1;i<=num;i++){
        arry[i]=i&1?arry[i/2]+1:arry[i/2];
    }
    return arry;
    
}

這是參考了答案之後的做法,可以看到該解法最經典的地方就是:

arry[i]=i&1?arry[i/2]+1:arry[i/2]; 將 i 和 1 做 &操作,判斷最後一位是否有1 ,如果有1,則結果爲i除以2的結果加上1,否則等於i除以2後的結果。

發佈了68 篇原創文章 · 獲贊 45 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章