338. Counting Bits

来源:互联网 发布:电影下载网站 知乎 编辑:程序博客网 时间:2024/05/29 12:10
题目描述:给定一个整数n,计算0到n每个数的二进制表示中1的个数
解题思路:可以使用动态规划。一个整数可以看做离它最近的二次幂加上另一个数
重点:2次幂为0,1为1,以此类推
public class Solution {    public int[] CountBits(int num) {       int[] bits = new int[num + 1];            bits[0] = 0;            if (num == 0)                return bits;            bits[1] = 1;            if (num == 1)                return bits;            for (int i = 2; i <= num; i++)            {                int m = (int)Math.Log(i, 2);                int closeM = (int)Math.Pow(2, m);                if (closeM == i)                    bits[i] = 1;                else                {                    bits[i] = bits[closeM] + bits[i - closeM];                }            }            return bits;            }}
0 0
原创粉丝点击