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