题解 | #牛群的编码# 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代码

主要考察二进制

这个方法的主要思想是使用二进制的加法规则,从最低位开始逐位相加,考虑进位。

解释代码:

  1. 创建一个 StringBuilder 对象 result,用于存储计算结果。
  2. 定义 carry(进位)初始为 0,然后使用两个指针 i 和 j 分别指向两个输入字符串 a 和 b 的最后一位。
  3. 通过循环处理,直到所有位数都处理完且没有进位。在循环中,从最低位开始逐位相加,同时考虑上一次的进位。
  4. 使用 digitA 和 digitB 分别取出 a 和 b 对应位置上的数字,注意将字符 '0' 转换为整数 0。
  5. 计算当前位的和 sum,包括当前位的数字和进位。
  6. 将 sum 的二进制结果插入到 result 的最前面,通过 insert 方法。这是因为从最低位开始相加,所以结果应该从最高位开始构建。
  7. 更新进位 carry,将其设置为 sum 除以 2,这是二进制加法的进位规则。
  8. 继续处理下一位,通过将 i 和 j 向前移动一位。
  9. 返回 result 的字符串表示作为结果。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 13:54
点赞 评论 收藏
分享
07-09 19:25
门头沟学院 Java
这是要把每一个投校招的都开盒吗?
26届之耻将大局逆转:裁人的时候一次性追回餐费
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务