Leetcode-67 二进制求和

作者: itbird01 | 来源:发表于2021-10-30 20:17 被阅读0次

    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();
        }
    }
    

    相关文章

      网友评论

        本文标题:Leetcode-67 二进制求和

        本文链接:https://www.haomeiwen.com/subject/ymwialtx.html