338. 比特位计数

64 阅读1分钟

题目:
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
解法:

// 如果n的末尾位0,则dp[n] = dp[n >> 1]
// 如果n的末尾为1,则dp[n] = dp[n-1] + 1
func countBits(n int) []int {
	dp := make([]int, n + 1)
	
	for i := 1; i <= n; i ++ {
		if i & 1 == 1 {
			dp[i] = dp[i - 1] + 1
		} else {
			dp[i] = dp[i >> 1]
		}
	}
	return dp
}