题解 | #牛群的编码#

牛群的编码

https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39

考察的知识点:字符串;

解答方法分析:

  1. 声明一个空字符串,用于存储相加结果。
  2. 初始化进位 carry 为 0。
  3. 从右往左遍历二进制字符串 a 和 b,用指针 i 和 j 分别表示当前遍历位置。如果 a[i] 和 b[j] 都为 ‘1’,同时 carry 为 1,则当前位置结果为 ‘1’,carry 更新为 1。如果 a[i] 和 b[j] 其中一个为 ‘1’,另一个为 ‘0’,同时 carry 为 1,则当前位置结果为 ‘0’,carry 仍然为 1。如果 a[i] 和 b[j] 其中一个为 ‘1’,另一个为 ‘0’,同时 carry 为 0,或者 a[i] 和 b[j] 都为 ‘0’,carry 为 1,则当前位置结果为 ‘1’,carry 更新为 0。如果 a[i] 和 b[j] 都为 ‘0’,同时 carry 为 0,则当前位置结果为 ‘0’,carry 仍然为 0。
  4. 遍历完 a 和 b 后,如果 carry 为 1,则在结果字符串最左侧插入 ‘1’。
  5. 返回结果字符串。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param a string字符串
     * @param b string字符串
     * @return string字符串
     */
    string addBinary(string a, string b) {
        string ans;
        int m = a.size();
        int n = b.size();
        int carry = 0;
        int i = m - 1;
        int j = n - 1;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (i >= 0) {
                sum += a[i--] - '0';
            }
            if (j >= 0) {
                sum += b[j--] - '0';
            }
            ans.insert(0, to_string(sum % 2));
            carry = sum / 2;
        }
        if (carry == 1) {
            ans.insert(0, "1");
        }
        return ans;
    }
};

全部评论

相关推荐

凌小云:问题太大了,首先把教育背景放前面。不然简历不用看就看被pass了。然后两个项目写了和没写一样,不如商城+点评的描述。那专业技能,前面来个技术名,后面一点都不见具体那些了。你说你熟练java,说说java反射实现方式,那些地方用,io都有那些。这让面试官怎么问。这份简历看下来,没一点问的希望。看着技术栈用的多,亮点也没解决什么实际问题。很差的一份简历,患上技术堆砌的毛病了
我的简历长这样
点赞 评论 收藏
分享
点赞 评论 收藏
分享
FFFoly:我也是,现在已经到了学长说的 能面试侃侃而谈的阶段了,但是已经没有公司给我面了
远程面试的尴尬瞬间
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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