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 XXX3. Similar ones
(M) Add Two Numbers
(E) Plus One
(E) Add Binary
No comments:
Post a Comment