题目

counting-bits


2. 算法

* 直接模拟

* bitset

* 技巧

* 位操作


3. 代码

* 直接模拟


class Solution {

public:

    vector<int> countBits(int num) {

        if (num == 0) return {0};

        vector<int> res{0, 1};

        int k = 2, i = 2;

        while (i <= num) {

            for (i = pow(2, k - 1); i < pow(2, k); ++i) {

                if (i > num) break;

                int t = (pow(2, k) - pow(2, k - 1)) / 2;

                if (i < pow(2, k - 1) + t) res.push_back(res[i - t]);

                else res.push_back(res[i - t] + 1);

            }

            ++k;

        }

        return res;

    }

};

* bitset


class Solution {

public:

    vector<int> countBits(int num) {

        vector<int> res;

        for (int i = 0; i <= num; ++i) {

            res.push_back(bitset<32>(i).count());

        }

        return res;

    }

};

* 技巧


class Solution {

public:

    vector<int> countBits(int num) {

        vector<int> res{0};

        for (int i = 1; i <= num; ++i) {

            if (i % 2 == 0) res.push_back(res[i / 2]);

            else res.push_back(res[i / 2] + 1);

        }

        return res;

    }

};

* 位操作


class Solution {

public:

    vector<int> countBits(int num) {

        vector<int> res(num + 1, 0);

        for (int i = 1; i <= num; ++i) {

            res[i] = res[i & (i - 1)] + 1;

        }

        return res;

    }

};

results matching ""

    No results matching ""