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();
}
}
个人感悟:虽然不知道题目考的是啥,可能是后面那种解法?不过我个人感觉还是解题为主,不忘初衷:算法是为了解决问题,不是制造问题。
以上是碰到的第六十七题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!