reverse, [i+j]+=[i]+[j], charAt(0)
11*5 =55 reverse 055
a=12
b=23
axb =
c[Index sum = 2len-2] = a[len-1]*b[len-1] =6
c[index sum = 2len-3] = a[len-2]*b[len-1] + a[len-1]*b[len-2] = 1*3+2*2=7
c[inde sum = 0] = a[0]*b[0] = 1*2=2
0 1 2
a=111
b = 12
0 1
[0]*[0] = first digit
[1]*[0]+[0]*[1] = 1 last three digit
[1]*[1]+[2]*[0] = 2 last two digit
[2]*[1] =3 last digit
222
111
1332=>4 digit = a's digit+ b's digit-1 = 4
2. Implementation
carry =0
int sum = carry + c[]
carry = sum/10;
if (carry ==1)
{
// res.append("1");
res.append(carry);
}
res.reverse().toString();
sum[i+j] += (int)(n1.charAt(i)-'0')+(int)(n2.charAt(j)-'0');
if (i+1< sum.elngth)
sum[i+1]+= carry;
res.reverse().toString(); takes (m+n) time
while ( res.charAt(0)=='0' && res.length() > 1 ) res.deleteCharAt(0);
(M) Add Two Numbers
(E) Plus One
(E) Add Binary
res.reverse().toString(); takes (m+n) time
while ( res.charAt(0)=='0' && res.length() > 1 ) res.deleteCharAt(0);
public String multiply(String num1, String num2)
{
// validate the input
if (num1 == null || num2 == null || num1.length() == 0 || num2.length() == 0)
return "";
int[] sum = new int[num1.length()+num2.length()];
int carry = 0;
//StringBuilder num1r = new StringBuilder(num1);
//num1 = num1r.reverse().toString();
//StringBuidlder num2r = new StringBuilder(num2);
//num2 = num2r.reverse().toString();
String n1 = new StringBuilder(num1).reverse().toString();
String n2 = new StringBuidler(num2).reverse().toString();
for (int i = 0 ; i < n1.length(); i++)
{
for (int j = 0; j < n2.length();j++)
{
//sum[i+j] = carry + (int)( n1.charAt(i) - '0')*(int) (n2.charAt(j) - '0');
//carry = sum[i+j] / 10;
// NOTE: sum[i+j] is accumulating and not possible to only get digit
sum[i+j] += (int)(n1.charAt(i)-'0')+(int)(n2.charAt(j)-'0');
}
}
//sum[num1.length()+num2.length()-1] = carry;
StringBuidler res = new StringBuilder();
//for ( int i = sum.length-1 ; i >=0;i--)
// res.append(sum[i]);
for (int i = 0; i < sum.length;i++)
{
int carry = sum[i]/10;
int digit = sum[i]%10;
if (i+1< sum.elngth)
sum[i+1]+= carry;
res.append(digit);
}
res.reverse().toString();
while ( res.charAt(0)=='0' && res.length() > 1 )
res.deleteCharAt(0);
//return res.toString().trim();
return res.toString();
}
[2][1][0]
a= 1 1 1
[1] [0]
b = 1 2
0 +[0][0] 0
c +[0][1] 1
c +[1][0] 1
c +[1][1] 2
c +[2][0] 2
c+ [2][1] 3
c[2+3-1] = c XXX
3. Similar ones(M) Add Two Numbers
(E) Plus One
(E) Add Binary
No comments:
Post a Comment