题解 | #牛群的编码# java
牛群的编码
https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param a string字符串 * @param b string字符串 * @return string字符串 */ public String addBinary (String a, String b) { // write code here StringBuilder result = new StringBuilder(); int carry = 0; int i = a.length() - 1; int j = b.length() - 1; 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; result.insert(0, sum % 2); carry = sum / 2; } return result.toString(); } }
Java代码
主要考察二进制
这个方法的主要思想是使用二进制的加法规则,从最低位开始逐位相加,考虑进位。
解释代码:
- 创建一个 StringBuilder 对象 result,用于存储计算结果。
- 定义 carry(进位)初始为 0,然后使用两个指针 i 和 j 分别指向两个输入字符串 a 和 b 的最后一位。
- 通过循环处理,直到所有位数都处理完且没有进位。在循环中,从最低位开始逐位相加,同时考虑上一次的进位。
- 使用 digitA 和 digitB 分别取出 a 和 b 对应位置上的数字,注意将字符 '0' 转换为整数 0。
- 计算当前位的和 sum,包括当前位的数字和进位。
- 将 sum 的二进制结果插入到 result 的最前面,通过 insert 方法。这是因为从最低位开始相加,所以结果应该从最高位开始构建。
- 更新进位 carry,将其设置为 sum 除以 2,这是二进制加法的进位规则。
- 继续处理下一位,通过将 i 和 j 向前移动一位。
- 返回 result 的字符串表示作为结果。