42. Multiply Strings

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

---

 09/21, Review

顺序,

最高位是0要去掉

public class Solution {
    public String multiply(String num1, String num2) {  
    
        if (num1.equals("0") || num2.equals("0"))
            return "0";  
       
        int l1 = num1.length();
        int l2 = num2.length();
        int newlen = l1+l2;       
        int[] n1 = new int[l1];  
        int[] n2 = new int[l2];  
        int[] res = new int[newlen];
        
        // convert string to number array  
        for (int i=0; i<l1; i++) {  
            n1[i] = num1.charAt(l1-1-i) - '0';  
        }  
        
        for (int i=0; i<l2; i++) {  
            n2[i] = num2.charAt(l2-1-i) - '0';  
        }
        
        // multiply
        for (int i=0; i<l1; ++i) {  
            for (int j=0; j<l2; ++j) { 
                res[i+j] += n1[i]*n2[j];
            }
        } 
        
        // convert to string. carray
        StringBuilder sb = new StringBuilder();
        
        for (int i=0; i < newlen; i++) {  
            sb.append((char)(res[i] % 10 + '0'));  
            
            // carry
            int carry = res[i] / 10;
            if(carry > 0 && i<newlen-1)
                res[i+1] +=  carry;
        }  
       
        // trim 0 at the biginning       
        if(sb.charAt(newlen-1) == '0')
            sb.deleteCharAt(newlen-1);
        
        // reverse
        sb = sb.reverse();
 
        return sb.toString();       
    }
}

 

 

---

Reference

public class Solution {
    public String multiply(String num1, String num2) {  
    
        if (num1.equals("0") || num2.equals("0"))
            return "0";  
       
        int l1 = num1.length(), l2 = num2.length();
        int newlen = l1+l2;       
        int[] n1 = new int[l1];  
        int[] n2 = new int[l2];  
        int[] res = new int[newlen];
        
        // convert string to number array  
        for (int i=0; i<l1; ++i) {  
            n1[i] = num1.charAt(i) - '0';  
        }  
        
        for (int i=0; i<l2; ++i) {  
            n2[i] = num2.charAt(i) - '0';  
        }
        
        // multiply
        for (int i=0; i<l1; ++i) {  
            for (int j=0; j<l2; ++j) {  
                res[i+j+1] += n1[i]*n2[j];  
            }
        } 
        
        // convert back to string . reverse prder
        StringBuilder sb = new StringBuilder();  
        for (int k=newlen-1; k>=0; k--) {  
            sb.append((char)(res[k] % 10 + '0'));  
            if (k>0) 
                res[k-1] += res[k] / 10;  
        }  
       
        // trim 0 at the biginning       
        if(sb.charAt(newlen- 1) == '0')
            sb.deleteCharAt(newlen- 1);
        
        // reverse
        sb = sb.reverse();
 
        return sb.toString();       
    }
}

 

posted @ 2013-09-06 01:36  LEDYC  阅读(161)  评论(0)    收藏  举报