二进制求和(java编写)

编程入门 行业动态 更新时间:2024-10-26 20:35:09

二进制求和(<a href=https://www.elefans.com/category/jswz/34/1770091.html style=java编写)"/>

二进制求和(java编写)

题目要求

输入: a = “1010”, b = “1011”
输出: “10101”

提示:

每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。

Related Topics 数学 字符串

解题思路

1.(取出两个数字组中最小长度的值)从尾数开始相加,加到这个位置为止
2.如果两个位置相同,判断是否要进位,有的话,多加一位
3.当不需要进位的时候,返回的数值是两个数组中较长多余的数字部分+之前运算的结果
4.如果需要进位,则继续按照剩余部分于进位相加减

代码如下

class Solution {public static String addBinary(String a, String b) {int alen=a.length();int blen=b.length();int maxlen=Math.max(alen,blen);int minlen=Math.min(alen,blen);StringBuilder sb=new StringBuilder();int flag=0;for(int i=minlen-1;i>=0;i--){int sum=a.charAt(--alen)-'0'+b.charAt(--blen)-'0'+flag;if(sum==0){sb.append(0);flag=0;}if(sum==1){sb.append(1);flag=0;}if(sum==2){sb.append(0);flag=1;}if(sum==3){sb.append(1);flag=1;}}if(maxlen==minlen&&flag==1){sb.append(1);return sb.reverse().toString();}if(flag==0){String res=sb.reverse().toString();if(a.length()>b.length())res=a.substring(0,maxlen-minlen)+res;elseres=b.substring(0,maxlen-minlen)+res;return res;}if(a.length()>b.length()){for(int i=maxlen-minlen-1;i>=0;i--){if(a.charAt(i)-'0'==1&&a.charAt(i)-'0'==flag){sb.append(0);flag=1;}else {sb.append(a.charAt(i)-'0'+flag);flag=0;}}if(flag==1)sb.append(1);}else{for(int i=maxlen-minlen-1;i>=0;i--){if(b.charAt(i)-'0'==1&&b.charAt(i)-'0'==flag){sb.append(0);flag=1;}else {sb.append(b.charAt(i)-'0'+flag);flag=0;}}if(flag==1)sb.append(1);}return  sb.reverse().toString();}
}

效果:

info
解答成功:
执行耗时:3 ms,击败了57.90% 的Java用户
内存消耗:37.6 MB,击败了50.43% 的Java用户

补充

解题第四步可以优化
继续通过后位于进位运算,遇到0的时候停下判别

更多推荐

二进制求和(java编写)

本文发布于:2024-02-27 16:48:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1707426.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!