LeetCode-338. Counting Bits [C++][Java]

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

解题思路

【C++】

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;
    }
};

【Java】

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;
    }
}

你可能感兴趣的:(LeetCode刷题怪,leetcode)