LeetCode-338. Counting Bitshttps://leetcode.com/problems/counting-bits/
Given an integer n
, return an array ans
of length n + 1
such that for each i
(0 <= i <= n
), ans[i]
is the number of 1
's in the binary representation of i
.
Example 1:
Input: n = 2 Output: [0,1,1] Explanation: 0 --> 0 1 --> 1 2 --> 10
Example 2:
Input: n = 5 Output: [0,1,1,2,1,2] Explanation: 0 --> 0 1 --> 1 2 --> 10 3 --> 11 4 --> 100 5 --> 101
Constraints:
0 <= n <= 10^5
class Solution {
public:
vector countBits(int n) {
vector dp(n+1, 0);
for (int i = 1; i <= n; ++i)
dp[i] = i & 1? dp[i-1] + 1: dp[i>>1];
// 等价于dp[i] = dp[i&(i-1)] + 1;
return dp;
}
};
class Solution {
public int[] countBits(int n) {
int[] dp = new int[n+1];
for (int i = 1; i <= n; ++i)
dp[i] = dp[i&(i-1)] + 1;
return dp;
}
}