classSolution{public:
string addBinary(string a, string b){int na = a.size(), nb = b.size();
string ans;
ans.reserve(max(na, nb)+1);// 预留空间,避免动态扩展时的性能损耗int carry =0;for(int i = na -1, j = nb -1; i >=0|| j >=0|| carry >0;--i,--j){int x =(i >=0)? a[i]-'0':0;// 从 a 中取值int y =(j >=0)? b[j]-'0':0;// 从 b 中取值int sum = x + y + carry;
carry = sum /2;// 更新进位
ans.push_back('0'+(sum %2));// 将当前位加入结果}reverse(ans.begin(), ans.end());// 反转结果,保证顺序正确return ans;}};
classSolution{public:// 思考:如何取 n 的最后一位? (n & 1)// 思考:如何取 n 的倒数第二位?(n >> 1) & 1// 如何 取出 倒数第二位 并赋值给 另一个数字的第二位?// ans = ans | (((n >> 1) & 1) << 31)uint32_treverseBits(uint32_t n){uint32_t ans =0;for(int i =0; i <32;++i){
ans = ans |((n &1)<<(31- i));
n >>=1;}return ans;}};
classSolution{public:inthammingWeight(int n){int ans =0;for(int i =0; i <32&& n >0;++i){// n = 0 可以提前截止
ans +=(n &1);// 取最后一位
n >>=1;// 将n右移一位}return ans;}};
classSolution{public:intsingleNumber(vector<int>& nums){int ans =0;for(int i =0; i <32;++i){int sum =0;for(auto& num : nums){
sum +=((num >> i)&1);// 求第i位上的和}
ans |=(sum %3)<< i;}return ans;}};
intrangeBitwiseAnd(int left,int right){int ans =0;for(int i =0; i <32;++i){int a =(left >>(31- i))&1;int b =(right >>(31- i))&1;if(a != b){break;}else{
ans |=(a <<(31- i));}}return ans;}
代码优化
// 直接一直右移直到相等intrangeBitwiseAnd(int left,int right){int shift =0;while(left != right){
left >>=1;
right >>=1;++shift;}return left << shift;}
classSolution{public:boolisPalindrome(int x){
string s =to_string(x);for(size_t i =0, j = s.size()-1; i < j;++i,--j){if(s[i]!= s[j]){returnfalse;}}returntrue;}};