LCR 002. 二进制求和 - 力扣(LeetCode)
目录
🎈了解题意
🎈算法分析
🚩cur1>=0
🚩cur2>=0
🚩t
🎈实现代码
🎈了解题意
遵循二进制加法法则,如果俩者相加等于2那么就“逢2进1”。如果俩者相加不等于2,那么就还是相加的结果(无非是0+0=0或者0+1=1),如果最高位相加等于2,也依旧逢2进1。
🎈算法分析
- 1.我们首先再字符串a和字符串b中分别定义一个指标从最后一位开始,然后往前相加。
- 2.定义t代表相加的结果。因为字符串a和b每个下标对应的元素是char型,我们要相加是int类型,需要将字符转int类型,相加字符串a中的字符更新t,相加字符串b中的字符更新t。
- 3.如果t>=2的话,那么我们需要将其取模,然后当时的类型是char类型,我们需要char转换成int类型,然后ret就更新了。
字符转数字 char c int ret=c-'0'
数字转字符 int c char ret=c+'0'
那么我们有没有想过循环的结束条件是什么?我们要分三种情况来推断出来。
🚩cur1>=0
🚩cur2>=0
🚩t
🎈实现代码
class Solution {
public:
string addBinary(string a, string b) {
string ret;
int cur1=a.size()-1,cur2=b.size()-1,t=0;
while(cur1>=0 || cur2>=0 || t)
//因为最后t=1 的时候,虽然cur1和cur2到负数了,t还要加上
{
if(cur1>=0) t+=a[cur1--]-'0';//字符转数字-
if(cur2>=0) t+=b[cur2--]-'0';
ret+=t%2+'0';//数字转字符+
t/=2;
}
reverse(ret.begin(),ret.end());
return ret;
}
};
我走的每一步都要心知肚明。