数据结构和算法分析数据结构与算法

Leetcode-67 二进制求和

2021-10-30  本文已影响0人  itbird01

67. 二进制求和

解题思路

1.分析题意可知,其实就是实现从末尾遍历,逐位累加
2.两个字符串如果长度相等,则不用处理长度,如果两个字符串长度不等,则将短字符串前面补0
3.从末尾实现,逐位累加
1)0+0=0
2)1+0=0+1=1
3)1+1=10=0+向高一位的进位1
4)1+1+1=11=1+向高一位的进位1

解题遇到的问题

后续需要总结学习的知识点

##解法1
class Solution {
    public String addBinary(String a, String b) {
        // 分析题意可知,其实就是实现从末尾遍历,逐位累加
        // 两个字符串如果长度相等,则不用处理长度,如果两个字符串长度不等,则将短字符串前面补0
        StringBuilder builder = new StringBuilder();
        if (a.length() > b.length()) {
            for (int i = 0; i < a.length() - b.length(); i++) {
                builder.append("0");
            }
            b = builder.toString() + b;
        } else {
            for (int i = 0; i < b.length() - a.length(); i++) {
                builder.append("0");
            }
            a = builder.toString() + a;
        }

        // 从末尾实现,逐位累加
        int add = 0;
        StringBuilder res = new StringBuilder();
        for (int i = a.length() - 1; i >= 0; i--) {
            int ai = a.charAt(i) - '0';
            int bi = b.charAt(i) - '0';
            // 0+0=0
            // 1+0=0+1=1
            // 1+1=10=0+向高一位的进位1
            // 1+1+1=11=1+向高一位的进位1
            if (ai + bi + add == 0 || ai + bi + add == 1) {
                res.append(ai + bi + add);
                add = 0;
            } else if (ai + bi + add == 2) {
                res.append(0);
                add = 1;
            } else if (ai + bi + add == 3) {
                res.append(1);
                add = 1;
            }
        }
        if (add != 0) {
            res.append(add);
        }

        return res.reverse().toString();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读