当前位置:网站首页>leetcode 22.8.1 二进制加法
leetcode 22.8.1 二进制加法
2022-08-04 07:07:00 【硬核哈士奇】
二进制加法
剑指 Offer II 002. 二进制加法 - 力扣(LeetCode)
未优化解法
public static String addBinary(String a,String b){
//先把两个字符串变成byte数组
byte[] bytes01 = a.getBytes();
byte[] bytes02 = b.getBytes();
//定义两个list
List<String> al= new ArrayList<String>();
List<String> bl = new ArrayList<String>();
//把“0” “1” 转存到list里
for (int i = 0; i < bytes01.length; i++) {
if (bytes01[i]==48) al.add("0");
else al.add("1");
}
for (int i = 0; i < bytes02.length; i++) {
if (bytes02[i]==48) bl.add("0");
else bl.add("1");
}
//这里把短的二进制数补齐
int maxSize = 0;
if (bl.size()>=al.size()){
int turns = bl.size() - al.size();
maxSize=bl.size();
for (int i = 0; i < turns; i++) {
al.add(0,"0");
}
}else{
int turns = al.size() - bl.size();
maxSize=al.size();
for (int i = 0; i < turns; i++) {
bl.add(0,"0");
}
}
String answer="";
int flag = 0;
//循环模拟二进制加法
for (int i = 0; i < maxSize; i++) {
int count = Integer.parseInt(al.get(al.size()-1-i))+flag+Integer.parseInt(bl.get(bl.size()-1-i));
if (count==0) {
answer="0"+answer;
flag=0;
}
if (count==1){
answer="1"+answer;
flag=0;
}
if (count==2){
answer="0"+answer;
flag=1;
}
if (count==3){
answer="1"+answer;
flag=1;
}
}
if (flag==1) answer="1"+answer;
return answer;
}
优化后解法
public static String binaryAdd(String a,String b){
//创建一个字符串构造器
StringBuilder sb = new StringBuilder();
//获取字符串长度
int i = a.length(),j=b.length(),c=0;
//进行循环,模拟二进制加法
while(i>0||j>0||c!=0){
int ii = i>0?a.charAt(--i)-'0':0;
int jj = j>0?b.charAt(--j)-'0':0;
c=c+ii+jj;
sb.append(c%2);
c/=2;
}
return sb.reverse().toString();
}
字符串拼接采用了StringBulider,去掉的补位的操作,也没有用额外的数组和链表;时间复杂度为O(N),额外空间复杂度为O(1)
边栏推荐
猜你喜欢
随机推荐
MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt
Error occurred while trying to proxy request项目突然起不来了
8.2学习记录
2022的七夕,奉上7个精美的表白代码,同时教大家改源码快速自用
Produce definition 产品与行业分析 勤于思考 善于总结 强于表达
一天学会JDBC06:PrepaerdStatemtnt
fanuc机器人IO分配报警信号分配无效
MMDeploy部署实战系列【第二章】:mmdeploy安装及环境搭建
Verilog“七宗罪”
学校申请链接
Detailed ResNet: What problem is ResNet solving?
高等代数_证明_两个矩阵乘积为0,则两个矩阵的秩之和小于等于n
ConstraintSet of animation of ContrstrainLayout
SQL去重的三种方法汇总
错误记录:TypeError: object() takes no parameters
Transform 相对位置变换,坐标系转换
ExoPlayer添加Ffmpeg扩展实现软解功能
使用腾讯云发送短信 ---- 手把手教你搞定所有步骤
力扣每日一题-第47天-15. 三数之和
Use of MotionLayout