LeetCode 67.二进制求和

浪尽此生 提交于 2020-02-04 13:23:33

在这里插入图片描述
思路:
首先进行末位对齐,然后一位一位的相加,如果需要进位,那么创建一个进位变量,
再到下一位,下一位进行相加时,要带上变量
如果最长的一个二进制到了首位相加完,进位还是1的话
那么就再添加一个1出来,
最后进行字符串的翻转

代码:

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int ca = 0;//进位
        for (int i = a.length() - 1, j = b.length() - 1;
        i >= 0 || j >= 0; i--, j--) {
            int sum = ca;
            if (i >= 0) {
                sum += a.charAt(i) - '0';
            } else {
                sum += 0;//不变
            }
            if (j >= 0) {
                sum += b.charAt(j) - '0';
            } else {
                sum += 0;//不变
            }
            sb.append(sum % 2);//添加相加结果
            ca = sum / 2;//是否进位
        }
        if (ca == 1) {
            sb.append(1);//最后一位进位
        }
        return sb.reverse().toString();//翻转
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!