leetcode338 位元位計數

2021-09-03 02:47:39 字數 638 閱讀 4563

給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

輸出: [0,1,1,2,1,2]

高階:思路:

// 首先是乙個數減1,對應二進位制的變化就是最右的乙個1變為0,而這個1右邊的所有0變為1,即相當於包括

//最後乙個1在內的右邊所有位取反,例如12(1100)減1,得到11(1011),然後再與變化前的數12(1100)

//進行與&運算,得到8(1000),可以看出經過這樣乙個運算之後這個數的1的個數減少了乙個,所以可以利用

//這個原理,得到res[i]=res[i&(i-1)]+1

public int countbits(int num) 

return res;

}

另解:f[i] = f[i / 2] + i % 2.

public int countbits(int num)

leetcode 338 位元數計位

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路 對於任意乙個十進位制數來說,有兩種情況。1 奇數,當乙個數為奇數的時候,它對...

Leetcode 338 位元位計數

給定乙個非負整數num。對於0 i num範圍中的每個數字i,計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2輸出 0,1,1 示例 2 輸入 5輸出 0,1,1,2,1,2 高階 要求演算法的空間複雜度為o n 你能進一步完善解法嗎?要求在c 或任何其他語言中不使用任何內建...

leetcode 338 位元位計數

思路 對應數字n的二進位制中1的位數是有規律的。0的位數為0。1是2的0次冪,2是2的1次冪。因此,只要是2的冪的數的二進位制中1的位數都是1。那麼對應地,3的二進位制中1的位數就是2的位數加上1的位數 同理,7的二進位制中1的位數就是4的位數加上3的位數,使用動態規劃得解 dp n dp n 最近...