本文主要是介绍338. 比特位计数——动态规划,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组ans 作为答案。
class Solution {
public:vector<int> countBits(int n) {//题目要求长度为 n + 1 的数组 ansvector<int> ans(n + 1);//设置初始值,已知0的二进制1的个数为0ans[0] = 0;//遍历各个整数//其实ans[i] = ans[i >>= 1] + ans末尾二进制是不是1for(int i = 1; i <= n; i++){int temp = i;//i是奇数,那么末尾一定是1if(i % 2 == 1)++ans[i];temp >>= 1;//temp已经计算好了,可以直接相加ans[i] += ans[temp];}return ans;}
};
Accepted
15/15 cases passed (4 ms)
Your runtime beats 85.02 % of cpp submissions
Your memory usage beats 80.44 % of cpp submissions (7.6 MB)
这篇关于338. 比特位计数——动态规划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!