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;}
};
我走的每一步都要心知肚明。