338. 比特位计数
class Solution {
public:
vector<int> countBits(int n) {
// 1. 明确状态含义:dp[i]表示i的二进制表示中1的个数
// 2. base状态初始化
vector<int> dp(n+1, 0);
// 3. 状态转移:
// (1) 偶数:二进制表示中,偶数中 1 的个数一定和除以 2 之后的那个数一样多。
// 因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的
// (2) 奇数:二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1。
for(int i = 1; i <= n; i++){
if(i % 2 == 1){
dp[i] = dp[i - 1] + 1;
}
else{
dp[i] = dp[i / 2];
}
}
return dp;
}
};
整数转化为二进制字符串
string int2bin(int n) {
string res;
stack<int> s;
while (n) {
s.push(n % 2);
n /= 2;
}
while (!s.empty()) {
res += to_string(s.top());
s.pop();
}
return res;
}