剑指 Offer II 002. 二进制加法
原文链接:https://blog.csdn.net/qq_39355828/article/details/120421463 (opens new window) 剑指 Offer II 002. 二进制加法
给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “10”
输出: “101”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
public String addBinary(String a, String b) {
//可变字符串创建
StringBuilder res=new StringBuilder();
int carry=0;
int l1=a.length()-1;
int l2=b.length()-1;
while(l1>=0||l2>=0)
{ //数据拼接
int x=l1<0?0:a.charAt(l1)-'0';
int y=l2<0?0:b.charAt(l2)-'0';
int sum=x+y+carry;
res.append(sum%2);
carry=sum/2;
l1--;
l2--;
}
if(carry!=0) res.append(carry);
//将最高位放在最后,则需要进行反转
return res.reverse().toString();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
https://leetcode-cn.com/problems/w3tCBm/solution/java_dong-tai-gui-hua-dai-zhu-shi-by-xin-hy3c/
public int[] count(int n)
{
int[] dp=new int[n+1];
dp[0]=0;
for(int i=1;i<=n;i++)
{
//奇数时候,二进制表示中比前面偶数多一位
if(i%2==1)
dp[i]=dp[i-1]+1;//奇数都比偶数加一个1,这是因为之前如果是偶数,则需要加1,变成奇数
else
//偶数的二进制末尾是0,右移一位等于i/2,1的个数不会改变
dp[i]=dp[i>>1];
}
return dp;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编辑 (opens new window)
上次更新: 2026/08/11, 13:36:18