博客
关于我
LeetCode 67. 二进制求和【字符串】
阅读量:798 次
发布时间:2023-04-16

本文共 1695 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要将两个二进制字符串相加,并返回它们的和的二进制表示。二进制加法类似于十进制加法,但需要处理进位。

方法思路

  • 初始化指针和进位变量:从字符串末尾开始处理每一位,使用两个指针分别指向两个字符串的末尾,进位变量初始化为0。
  • 逐位相加处理:从右到左逐位相加,每一位的和与进位决定当前位的结果和下一位的进位。
  • 处理剩余位:处理完其中一个字符串后,继续处理剩余部分的位,并处理可能的进位。
  • 处理最终进位:如果在处理完所有位后仍有进位,添加到结果中。
  • 反转结果:由于我们是从低位到高位处理的,结果需要反转以正确显示高位在前。
  • 解决代码

    public class Solution {    public String addBinary(String a, String b) {        int i = a.length() - 1;        int j = b.length() - 1;        int carry = 0;        StringBuilder sb = new StringBuilder();                // 从右到左处理每一位        while (i >= 0 && j >= 0) {            int aDigit = a.charAt(i) - '0';            int bDigit = b.charAt(j) - '0';            int sum = aDigit + bDigit + carry;            int current = sum % 2;            carry = sum / 2;            sb.append(current);            i--;            j--;        }                // 处理剩余的a部分        while (i >= 0) {            int aDigit = a.charAt(i) - '0';            int sum = aDigit + carry;            int current = sum % 2;            carry = sum / 2;            sb.append(current);            i--;        }                // 处理剩余的b部分        while (j >= 0) {            int bDigit = b.charAt(j) - '0';            int sum = bDigit + carry;            int current = sum % 2;            carry = sum / 2;            sb.append(current);            j--;        }                // 处理最终的进位        if (carry > 0) {            sb.append(carry);        }                // 反转得到正确的顺序        return sb.reverse().toString();    }}

    代码解释

  • 初始化变量ij 分别指向两个字符串的末尾,carry 初始化为0。
  • 逐位处理:使用循环从右到左处理每一位,计算当前位的和与进位,更新结果和进位。
  • 处理剩余位:处理完其中一个字符串后,继续处理剩余部分的位,确保所有位都被处理。
  • 处理最终进位:如果有剩余的进位,添加到结果中。
  • 反转结果:由于我们是从低位到高位处理的,结果需要反转以正确显示高位在前。
  • 这种方法确保了我们高效地处理二进制字符串相加,并正确处理所有情况,包括进位和不同长度的字符串。

    转载地址:http://obgfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现复数类+-x%(附完整源码)
    查看>>
    Objective-C实现外观模式(附完整源码)
    查看>>
    Objective-C实现多启发式a star A*算法(附完整源码)
    查看>>
    Objective-C实现多尺度MSR算法(附完整源码)
    查看>>
    Objective-C实现多种方法求解定积分(附完整源码)
    查看>>
    Objective-C实现多组输入(附完整源码)
    查看>>
    Objective-C实现多项式函数在某个点的评估算法(附完整源码)
    查看>>
    Objective-C实现多项式哈希算法(附完整源码)
    查看>>
    Objective-C实现大位数乘法(附完整源码)
    查看>>
    Objective-C实现大根堆(附完整源码)
    查看>>
    Objective-C实现奇偶检验码(附完整源码)
    查看>>
    Objective-C实现奇偶转置排序算法(附完整源码)
    查看>>
    Objective-C实现奇异值分解SVD(附完整源码)
    查看>>
    Objective-C实现奎因-麦克拉斯基算法(附完整源码)
    查看>>
    Objective-C实现子集总和算法(附完整源码)
    查看>>
    Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
    查看>>
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>