a= "11"
b =" 1"
Return "100"
2. Implementation
Q1:MSB->LSB
A1: From the end(len-1) and add backward . Consider carry
Q1: carry =1?
A1: add one more character
Q1: Add one more character ?
A1: StringBuilder.append("1").reverse()
res.append(sum%2);
// NOTE: iterating aIndex--; bIndex--;
// NOTE: remain digits while( aIndex >= 0 ) { int sum = (int) (a.charAt(aIndex) - '0') + carry; carry = sum /2; res.append(sum); aIndex--; } while ( bIndex >= 0) { int sum = (int) ( b.charAt( bIndex)- '0') + carry; carry = sum /2; res.append(sum); bIndex--; }
if ( carry > 0) res.append(carry);
// NOTE: reverse() is for StringBuilder
return res.reverse().toString();
// time:O(max(m,n)), Space:O(n) stringbuilder
public String addBinary(String a, String b)
{
// validate the input
if (a == null || a.length() ==0 )
return b;
if (b == null || b.length () == 0)
return a;
StringBuilder res = new StringBuilder();
int aIndex = a.length()-1;
int bIndex = b.length()-1;
int carry = 0;
while (aIndex >=0 && bIndex >=0 )
{
int sum = (int) (a.charAt(aIndex)-'0') + (int) (b.charAt(bIndex) - '0') + carry;
// NOTE: append data type int ,double, boolean..etc,http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
//res.append( String.valuesOf(sum%2) );
res.append(sum%2);
carry = sum/2;
// NOTE: iterating
aIndex--;
bIndex--;
}
// NOTE: remain digits
while( aIndex >= 0 )
{
int sum = (int) (a.charAt(aIndex) - '0') + carry;
carry = sum /2;
res.append(sum);
aIndex--;
}
while ( bIndex >= 0)
{
int sum = (int) ( b.charAt( bIndex)- '0') + carry;
carry = sum /2;
res.append(sum);
bIndex--;
}
//if (carry ==1 )
// res.append("1");
if ( carry > 0)
res.append(carry);
//res.toString().reverse();
// NOTE: reverse() is for StringBuilder
return res.reverse().toString();
}
3. Similar ones(M) Add Two Numbers
(M) Multiply Strings
(M) Plus One
No comments:
Post a Comment