Leetcode - Add Binary

本文详细探讨了如何优化二进制加法的编程实现,从使用StringBuilder到数组的方法,作者分享了从低效到高效的编程经验。通过对比不同策略的优缺点,强调了先写对代码的重要性,并提供了简洁有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[分析]
从低位往高位逐位相加,就是这么一个简单的题却花了我一个多小时,无力骂自己了……
一开始想到用StringBuilder保存结果,但为了得到结果我需要每次将新算的一位insert到最前面,这样效率比较低,于是转而使用数组保存结果,数组预先开成两个字符串最大长度加1,这种coding起来其实很麻烦,要维护三个下标,很容易出错。
其实是对StringBuilder接口不熟,没有意识到它有reverse方法;
发现自己潜意识里有一口吃成胖子或者一步登天的想法,使用StringBuilder得到逆序结果就不行吗,自己再想办法逆成正确的呗;
[color=blue]小处的节省常常会让自己得不偿失[/color],计算一位的结果时一开始想避免使用%,于是代码时这样的
sum.append(bitsum-2),正确的是sum.append(bitsum >= 2 ? (bitsum - 2) : bitsum)。
使用% 就不会犯这种貌似的失误,而且可读性强不是一点点,提交后发现运行时间更少(吃惊)
再说一次,[color=red]先写对再优化[/color]!


public class Solution {
public String addBinary(String a, String b) {
if (a == null || b == null)
return a != null ? a : b;
StringBuilder sum = new StringBuilder();
int carry = 0;
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 && j >= 0) {
int bitsum = a.charAt(i--) - '0' + b.charAt(j--) - '0' + carry;
sum.append(bitsum % 2);
carry = bitsum / 2;
}
while (i >= 0) {
int bitsum = a.charAt(i--) - '0' + carry;
sum.append(bitsum % 2);
carry = bitsum / 2;
}
while (j >= 0) {
int bitsum = b.charAt(j--) - '0' + carry;
sum.append(bitsum % 2);
carry = bitsum / 2;
}
if (carry == 1)
sum.append(1);
return sum.reverse().toString();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值