Leetcode 338 位元位計數

2022-06-14 19:30:12 字數 1383 閱讀 7488

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

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

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

首先想到了暴力破解,既每個二進位制位置都和 該位置的1 進行比較

class solution 

return ans;

}//還有一種方式 是通過 x = x&(x - 1),該運算子會將二進位制表示的最後乙個1變成了0,

//因此,對x重複該操作,直到x變成了0,那麼操作次數就是x的 位元數

private int count(int num)

return ans;}/*

private int count(int num)

return ans;}*/

}

class solution 

return ans;

}}

對於數字而言,只有兩類:奇數偶數

奇數:二進位制表示中 奇數 一定會比前一位的偶數 多乙個 1

0:0000 1:0001

2:0010 3:0011

4:0100 5:0101

比較 0 1, 2 3,4 5 這三組數字,1比0最後一位多了乙個1 ,3比2最後一位多了乙個1 ,5比3最後一位多了乙個1

偶數:二進位制表示中,偶數a中 1 的個數 一定和當前偶數的一半a/ 2相同 既 num[a] = num[a / 2]

2:0010 4:0100 8:1000

3:0011 6:0110 12:1110

原因在於a / 2 + a / 2無論a/2是奇數還是偶數1的個數保持不變,只是所有的1向前移動一位

class solution 

ans[i] = ans[i - bits] + 1;

}return ans;

}}

class solution 

return ans;

}}

class solution 

return ans;

}}

leetcode 338 位元數計位

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

leetcode338 位元位計數

給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 思路 首先是乙個數減1,對應二進位制的變化就是最右的乙個1變為0,而這個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 或任何其他語言中不使用任何內建...