本题难度:
简单
本题思路:
两字符串对应位置字符先转成整数型再和上一位进位求和,模2所得即为本位答案,除2所得即为向高位的进位,若一字符串已经结束,则只要将剩余字符串的对应数据与上一位进位不断相加得到本位答案,并产生新的进位,直到所有字符串数据运算结束即可。
本题代码:
class Solution {
public String addBinary(String a, String b) {
/*
String binarySummation = "";不仅分配内存,而且赋值
String binarySummation = new String();只分配内存
String binarySummation = null;不分配内层,最好不用
*/
String binarySummation = "";
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
for(; i >= 0 && j >= 0; i--, j--){
int temp = carry;
carry = ((a.charAt(i) - '0') + (b.charAt(j) - '0') + temp) / 2;
if(((a.charAt(i) - '0') + (b.charAt(j) - '0') + temp) % 2 == 1)
binarySummation = "1" + binarySummation;
else
binarySummation = "0" + binarySummation;
}
while(i >= 0){
int temp = carry;
carry = ((a.charAt(i) - '0') + temp) / 2;
if(((a.charAt(i) - '0') + temp) % 2 == 1)
binarySummation = "1" + binarySummation;
else
binarySummation = "0" + binarySummation;
i--;
}
while(j >= 0){
int temp = carry;
carry = ((b.charAt(j) - '0') + temp) / 2;
if(((b.charAt(j) - '0') + temp) % 2 == 1)
binarySummation = "1" + binarySummation;
else
binarySummation = "0" + binarySummation;
j--;
}
if(carry == 1)
binarySummation = "1" + binarySummation;
return binarySummation;
}
}
本题复杂度:
时间复杂度T(n)=O(n)
空间复杂度S(n)=O(1)