位元位計數

2021-10-08 11:52:58 字數 806 閱讀 1690

位元位計數

給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,

計算其二進位制數中的 1 的數目並將它們作為陣列返回。

題解:這種題如果不加限制的話可以選擇移位&1的方式計算1的個數

但是要求是在o(n)的時間複雜度下完成就需要腦筋急轉彎啦

0000 ---------> 0

0001 ---------> 1 ——————0000&0001=0000+1

0010 ---------> 1 ——————0001&0010=0000+1

0011 ---------> 2 ——————0010&0011=0010+1

0100 ---------> 1 ——————0011&0100=0000+1

0101 ---------> 2 ——————0100&0101=0100+1

0111 ---------> 3 ——————0101&0111=0101+1

使用&操作發現什麼,0001中1個個數等於1&0後剩餘的1的個數+1,此時問題就可以向小規模問題轉化,因為&操作後i和i-1中1的結果說明i和i-1中有共同的位元位為1的

那麼我們只需要找到&結果為dp[i&i-1]中1的個數,舉例:

0100&0011->0000此時結果為0,那麼我們去找0中1存在的個數=0

由於i和i-1在位元位上只相差1,所以每次+1就行

public

class

countbits

return dp;

}}

位元位計數

一 題目描述 二 題目分析 題解參考 自己分析沒分析出來,看完題解,忍不住妙出了聲。對於數字有兩類,偶數與奇數,從二進位制的角度看,奇數的二進位制標示肯定比前面乙個偶數多1,因為偶數的最低為0,而因為最低為為0,則讓乙個偶數的二進位制1的個數一定和自身除以2後的二進位制1的個數相等。通過上面這兩個特...

位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 1.暴力法 intisbinary int n return count int cou...

位元位計數

目錄題解 給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的1的數目並將它們作為陣列返回。輸出輸入 2輸出 0 1 1輸入 5輸出 0 1 1 2 1 2由於n n 1 可以消去n對應的二進位制數的最後一位1,那麼以此可以求出計算n對應的二進位制數中的1的個數。由於要...