Counting Bits

EasyDynamic ProgrammingBit Manipulation

Solution

import { range } from '@algorithm/lib';
 
export function countBits(n: number): number[] {
  const answer = new Array<number>(n + 1).fill(-1);
  const countBit = (n: number): number => {
    if (answer[n] !== -1) {
      return answer[n];
    }
    if (n <= 1) {
      return (answer[n] = n);
    }
    if (n % 2 === 0) {
      return (answer[n] = countBit(n / 2));
    }
    return (answer[n] = countBit(Math.floor(n / 2)) + 1);
  };
  for (const num of range(n + 1)) {
    countBit(num);
  }
  return answer;
}