C# 二进制求和

文章介绍了如何用编程解决LeetCode上的一个问题——给定两个二进制字符串,返回它们的和。提供了两种解决方案,一种是通过将二进制转换为十进制进行加法运算,另一种是直接对二进制字符串进行逐位加法并处理进位。强调了算法应以解决问题为主,而非追求复杂性。
摘要由CSDN通过智能技术生成

67 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = “11”, b = “1”
输出:“100”
示例 2:

输入:a = “1010”, b = “1011”
输出:“10101”

提示:

1 <= a.length, b.length <= 104
a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成
字符串如果不是 “0” ,就不含前导零

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary

解决方案:

提供思路

1)虽然我不知道这道题想考啥,但是我进制转换可以求出来而且非常简单

2)这道题要求计算两个二进制数的加法。二进制数的进位规则是逢二进一。计算加法的顺序是从低位到高位,计算两个字符串形式的非负整数的加法时,按照从右到左的顺序同时遍历两个字符串,在两个字符串中遍历到的数位是相同的,相同数位的数字可以直接相加,相加过程中会产生进位。

上代码:

public class Solution
{
    public string AddBinary(string a, string b)
    {
        int aa = Convert.ToInt32(a, 2);
        int bb = Convert.ToInt32(b, 2);

        int cc = aa + bb;
        string result = Convert.ToString(cc, 2);
        return result;
    }
}
public class Solution {
    public string AddBinary(string a, string b) {
        StringBuilder sb = new StringBuilder();
        int index1 = a.Length - 1, index2 = b.Length - 1;
        int carry = 0;
        while (index1 >= 0 || index2 >= 0 || carry != 0) {
            int digit1 = index1 >= 0 ? a[index1] - '0' : 0;
            int digit2 = index2 >= 0 ? b[index2] - '0' : 0;
            int sum = digit1 + digit2 + carry;
            sb.Append(sum % 2);
            carry = sum / 2;
            index1--;
            index2--;
        }
        StringBuilder sb2 = new StringBuilder();
        for (int i = sb.Length - 1; i >= 0; i--) {
            sb2.Append(sb[i]);
        }
        return sb2.ToString();
    }
}

个人感悟:虽然不知道题目考的是啥,可能是后面那种解法?不过我个人感觉还是解题为主,不忘初衷:算法是为了解决问题,不是制造问题。

以上是碰到的第六十七题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值