leetcode刷题47.二进制求和——Java版

Posted 一条coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题47.二进制求和——Java版相关的知识,希望对你有一定的参考价值。

⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐

上帝啊!!!纪念我第一次完全自己做出来的编程,好感动怎么回事?!!

——leetcode此题热评

前言

哈喽,大家好,我是一条。

糊涂算法,难得糊涂

《糊涂算法》专栏上线倒计时——7天

Question

67. 二进制求和

难度:简单

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

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

提示:

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

Solution

整体思路是将两个字符串较短的用 00 补齐,使得两个字符串长度一致,然后从末尾进行遍历计算,得到最终结果。

  • 从后向前遍历,缝二进一
  • 翻转字符串

Code

所有leetcode代码已同步至github

欢迎star

/**
 * @author 一条coding
 */
class Solution {
    public String addBinary(String a, String b) {
        StringBuilder ans = new StringBuilder();
        int ca = 0;
        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
            int sum = ca;
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
            ans.append(sum % 2);
            ca = sum / 2;
        }
        ans.append(ca == 1 ? ca : "");
        return ans.reverse().toString();
    }
}

Result

复杂度分析

  • 时间复杂度:O(N)

🌈寻宝

⭐今天是坚持刷题更文的第41/100天

⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

⭐更多算法题欢迎关注专栏《leetcode》

为了回馈各位粉丝,礼尚往来,给大家准备了一些算法教学视频和电子书

需要的小伙伴可以私信我领取,不过一定要先关注哦!不然无法发私信!

以上是关于leetcode刷题47.二进制求和——Java版的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题48.寻找数组的中心下标——Java版

leetcode刷题68.前 n 个数字二进制中 1 的个数 ——Java版

leetcode刷题15.汉明距离——Java版

leetcode刷题52.最大连续 1 的个数——Java版

leetcode刷题58.移除元素——Java版

算法进阶之Leetcode刷题记录