美文网首页
AC 剑指 Offer II 002. 二进制加法

AC 剑指 Offer II 002. 二进制加法

作者: itbird01 | 来源:发表于2022-03-22 07:03 被阅读0次

    给定两个 01 字符串 ab ,请计算它们的和,并以二进制字符串的形式输出。
    输入为 **非空 **字符串且只包含数字 10
    示例 1:
    输入: a = "11", b = "10"
    输出: "101"
    示例 2:

    输入: a = "1010", b = "1011"
    输出: "10101"

    提示:
    每个字符串仅由字符 '0' 或 '1' 组成。
    1 <= a.length, b.length <= 10^4
    字符串如果不是 "0" ,就都不含前导零。

    class Solution {
        /**
         * @Title: addBinary
         * @Description: 字符串翻转+补0+进位
         * @author: itbird
         * @date 2022年3月21日 下午8:12:08
         * @param a
         * @param b
         * @return String 时间复杂度: O(N) 空间复杂度: O(N)
         */
        public String addBinary(String a, String b) {
            int k = a.length() - b.length();
            StringBuilder aBuilder = new StringBuilder(a).reverse();
            StringBuilder bBuilder = new StringBuilder(b).reverse();
            // 补0
            if (k > 0) {
                for (int i = 0; i < k; i++) {
                    bBuilder.append('0');
                }
            } else {
                for (int i = 0; i < Math.abs(k); i++) {
                    aBuilder.append('0');
                }
            }
    
            int flag = 0;
            StringBuilder reStringBuilder = new StringBuilder();
            for (int i = 0; i < aBuilder.length(); i++) {
                int temp1 = aBuilder.charAt(i) - '0';
                int temp2 = bBuilder.charAt(i) - '0';
                int temp = temp1 + temp2 + flag;
                if (temp == 3) {
                    flag = 1;
                    reStringBuilder.append('1');
                } else if (temp == 2) {
                    flag = 1;
                    reStringBuilder.append('0');
                } else if (temp == 1) {
                    flag = 0;
                    reStringBuilder.append('1');
                } else {
                    flag = 0;
                    reStringBuilder.append('0');
                }
            }
            if (flag == 1) {
                reStringBuilder.append('1');
            }
            return reStringBuilder.reverse().toString();
        }
    }
    

    相关文章

      网友评论

          本文标题:AC 剑指 Offer II 002. 二进制加法

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