题解 | #牛群的编码#
牛群的编码
https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39
- 题目考察的知识点
字符串,位运算
- 题目解答方法的文字分析
因为是二进制数的加减,所以可以使用位运算替代上述运算中的一些加减乘除的操作。a和b从右往左取数,求和,与2取余,把余数添加到字符串;初始化一个数来记录进位,即每次做除法得到的除数;
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param a string字符串
* @param b string字符串
* @return string字符串
*/
public String addBinary (String a, String b) {
StringBuffer sb = new StringBuffer();
//指向两个字符串的末尾
int i=a.length()-1;
int j=b.length()-1;
int carry = 0;//进位
//确保还有当前位还有数需要计算
while(i>=0||j>=0||carry!=0){
int digitA=i>=0?a.charAt(i)-'0':0;
int digitB=j>=0?b.charAt(j)-'0':0;
int sum = digitA+digitB+carry;
carry=sum>=2?1:0;//判断是否有进位
sum=sum>=2?sum-2:sum;
sb.append(sum);
i--;
j--;
}
return sb.reverse().toString();
}
}