LeetCode338. Counting Bits(位运算+DP)

来源:互联网 发布:adobe官网软件下载 编辑:程序博客网 时间:2024/05/16 11:01

题目链接

题意:输入num,给出[0, num]中每个数字二进制中1的个数,返回vector。

O(n)方法,可以写出两种状态转移方程(也许更多)。

  1. i中1的个数比i&(i-1)中多一个。
class Solution {public:    vector<int> countBits(int num) {        vector<int> ans;        ans.push_back(0);        for(int i = 1; i <= num; i++){            ans.push_back(ans[i&(i-1)] + 1);        }        return ans;    }};
  1. i中1的个数(除了最低位)与i>>1相等(注意&和+的优先级)。
class Solution {public:    vector<int> countBits(int num) {        vector<int> ans;        ans.push_back(0);        for(int i = 1; i <= num; i++){            ans.push_back(ans[i>>1] + (i&1));        }        return ans;    }};
0 0