338. 位元位計數
阿新 • • 發佈:2021-11-30
描述
給你一個整數n
,對於0 <= i <= n
中的每個i
,計算其二進位制表示中1
的個數,返回一個長度為n + 1
的陣列ans
作為答案。
連結
338. 位元位計數 - 力扣(LeetCode) (leetcode-cn.com)
解法:位運算 判斷 奇偶數, + 動態規劃
對於所有的數字,只有兩類:
奇數:二進位制表示中,奇數一定比前面的那個偶數多一個 1,因為多的就是 最低位(二進位制下)的1.
偶數
1 class Solution { 2 public int[] countBits(int n) { 3 int[] res = new int[n+1]; 4 res[0] = 0; 5 for(int i = 1; i<= n; i++) { 6 if( (i & 1) == 1) { // 奇數 7 res[i] = res[i-1] + 1;8 } 9 else { // 偶數 10 res[i] = res[i/2]; 11 } 12 } 13 return res; 14 } 15 }
參考