第四次学习笔记
3.4
LeetCode
比特位运算
哇,今天的真的让我收获格外的自信!
昨天凌晨瞄了一眼题目,在脑子里构思了一下就睡了;白天在上课时候又想了想,整理了思路;晚上回来赶快把代码打了
class Solution {
public:
vector<int> countBits(int num) {
vector<int> rec(num + 1);
for (int i = 0; i < num + 1; i++) {
rec[i] = fun(i);
}
return rec;
}
int fun(int n) {
if (n == 1 || n == 0) { return n; }
if (!(n % 2)) { //这里已修正
return fun(n / 2);
}
else {
return fun((n - 1) / 2) + 1;
}
}
};
结果出了个小错,我把(n % 2)当成偶数了,后来改过来了(!(n % 2))
正准备关的时候,突然感觉可以优化,于是赶紧行动,改了改,一分钟搞定
class Solution {
public:
vector<int> countBits(int num) {
vector<int> rec(num + 1);
for (int i = 0; i < num + 1; i++) {
rec[i] = fun(i,rec);
}
return rec;
}
int fun(int n,vector<int>& rec) {
if (n == 1 || n == 0) { return n; }
if (!(n % 2)) {
return rec[n / 2];
}
else {
return rec[(n - 1) / 2] + 1;
}
}
};
这样避免了许多不必要的重复计算,结果也是可喜可贺的~
c++
vector <int> num(size)
这个用来定义vector数组。