LeetCode338 比特位计数

LeetCode338 比特位计数

  • 题目
  • 解题
    • 解题一:Brian Kernighan 算法
    • 解题二:动态规划——最高有效位
    • 解题三:动态规划——最低有效位

题目

LeetCode338 比特位计数_第1张图片
LeetCode338 比特位计数_第2张图片

解题

解题一:Brian Kernighan 算法

// javascript
var countBits = function(n) {
     
    const bits = new Array(n + 1).fill(0);
    for (let i = 1; i <= n; i++) {
     
        bits[i] = countOnes(i);
    }
    return bits;
};

const countOnes = (n) => {
     
    let countOne = 0;
    for (let i = n; i > 0; i &= (i - 1)) {
     
        countOne++;
    }
    return countOne;
}

LeetCode338 比特位计数_第3张图片

解题二:动态规划——最高有效位

LeetCode338 比特位计数_第4张图片

// javascript
var countBits = function(n) {
     
    const bits = new Array(n + 1).fill(0);
    for (let i = 1; i <= n; i++) {
     
        bits[i] = bits[i & (i - 1)] + 1;
    }
    return bits;
};

在这里插入图片描述

解题三:动态规划——最低有效位

LeetCode338 比特位计数_第5张图片

// javascript
var countBits = function(n) {
     
    const bits = new Array(n + 1).fill(0);
    for (let i = 1; i <= n; i++) {
     
        bits[i] = bits[i >> 1] + (i & 1);
    }
    return bits;
};

在这里插入图片描述

你可能感兴趣的:(刷题笔记,动态规划,位运算)