春招打卡d10n15-leetcode刷题67二进制求和

119 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题67二进制求和

前文

本文为leetcode位运算类型题目,题目序号为67,主要考察位运算相关知识。

题目信息

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

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

解题思路

根据题目信息,这是一道二进制求和题目。既然提到二进制,那么不可避免地要想到满2进位的特性。根据该题目来说,主要是需要对二进制两个数进行求和。简单来想,自然是转十进制求和后再转为二进制即可。但本位采用的方式为直接对给定的二进制数字进行处理。对于两个二进制数字从右向左遍历,当满2时则记录为0,并向前进位。经过这种操作,可以将两个二进制数字完成求和处理,最后即可得到目标的两个二进制数字加和结果。而在操作过程中,要注意需要将char转为string才可继续操作,不能直接采用char值操作,会产生结果异常问题。另外要注意指针的溢出问题,以及遍历结束的最后一位数据处理。最后将结果反转即可得到目标的解题答案。以此方式便可得到解题结果。

解题代码

public String addBinary(String a, String b) {
    int length = a.length() > b.length() ? a.length() : b.length();
    StringBuilder stringBuilder = new StringBuilder();
    int nextAdd = 0;
    for (int i = 0; i < length; i++) {
        int item1 = a.length()  - 1 - i >= 0 ? Integer.valueOf(String.valueOf(a.charAt(a.length()  - 1 - i))) : 0;
        int item2 = b.length() - 1 - i >= 0 ? Integer.valueOf(String.valueOf(b.charAt(b.length() - 1 - i))) : 0;
        if(item1 + item2 + nextAdd >= 2){
            stringBuilder.append(item1 + item2 + nextAdd - 2);
            nextAdd = 1;
        } else {
            stringBuilder.append(item1 + item2 + nextAdd);
            nextAdd = 0;
        }
    }
    if(nextAdd > 0){
        stringBuilder.append(1);
    }
    return stringBuilder.reverse().toString();
}

后记