首页 > 其他 > 详细

p158 连续自然数二进制中 1 的个数(leetcode 338)

时间:2020-07-30 18:08:34      阅读:71      评论:0      收藏:0      [点我收藏+]

一:解题思路

方法一:之前做过一道求一个正整数二进制中1的个数的题目,利用这个题目为基础,然后遍历从1-n 这n+1 个数字。Time:O(n*k),Space:O(1)

方法二:利用动态规划的思想来做,递推公式为:d[i]=d[i&(i-1)]+1。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

方法一C++:

class Solution 
{
private:
    int theNumberOfOne(int n)
    {
        int count = 0;

        while (n != 0)
        {
            count++;
            n &= (n-1);
        }

        return count;
    }
public:
    vector<int> countBits(int num) 
    {
        vector<int> d(num+1,0);

        for (int i = 0; i <= num; i++)
        {
            d[i] = theNumberOfOne(i);
        }

        return d;
    }
};

方法一Java:

class Solution 
    {
        private int theNumberOfOne(int num)
        {
               int count=0;
               
               if(num!=0)
               {
                   count++;
                   num&=(num-1);
               }
               
               return count;
        }
        
        public int[] countBits(int num) 
        {
               int[] d=new int[num+1];
               
               for(int i=0;i<=num;i++)
               {
                   d[i]=theNumberOfOne(i);
               }
               
               return d;
        }
    }

方法二C++:

class Solution 
{
public:
    vector<int> countBits(int num) 
    {
        vector<int> d(num+1,0);

        for (int i = 1; i <= num; i++)
        {
            d[i] = d[i& (i - 1)] + 1;
        }

        return d;
    }
};

方法二Java:

class Solution 
    {
        public int[] countBits(int num) 
        {
               int[] d=new int[num+1];
               
               for(int i=1;i<=num;i++)
               {
                   d[i]=d[i & (i-1)]+1;
               }
               
               return d;
        }
    }

p158 连续自然数二进制中 1 的个数(leetcode 338)

原文:https://www.cnblogs.com/repinkply/p/13404877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!