T338位元位計數

2021-10-05 23:35:32 字數 785 閱讀 1497

case1:

dp思想:

利用 i = a + i - a,其中 a = 2/4/6/8/16/…/2^n

如 5 = 4 + 1

12 = 8 + 4(將10進製數轉化為二進位制時的常見思路)

這樣我們就可以利用其之前的結果來進行簡化計算

所以dp[i] = dp[a] + dp[i-a]其中 a = 2/4/6/8/16/…/2^n

dp[i]表示數字i對應的二進位制數中1的個數

class solution 

for(int i=3;i<=num;i++)else

}return res;

}}

case2:利用數字的奇偶性以及位移操作:

若i為奇數,則其二進位制中1的個數等於 i-1對應二進位制中1的個數

若i為偶數,則其二進位制中1的個數等於 i/2對應二進位制中1的個數(除以2相當於右移一位也就是把最低為給移掉了,而若為偶數的話最低位一定是0,所以右移後兩者對應的二進位制完全一致))

如: 6 = 0110

3 = 0011(不就相當於將6給右移了1位)

class solution else

}return res;

}}

case3:暴力法

class solution 

}return res;

}}

338 位元位計數

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

338 位元位計數

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

338 位元位計數

題目描述 給定乙個非負整數 num。對於 0 i num 範圍中的每個數字 i 計算其二進位制數中的 1 的數目並將它們作為陣列返回。示例 1 輸入 2 輸出 0,1,1 示例 2 輸入 5 輸出 0,1,1,2,1,2 高階 方法1 直接對每乙個數字進行判斷 主要思路 1 對每乙個數字單獨判斷其二...