leetcode 43 Multiply Strings

題目詳情

Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.
Note:
-The length of both num1 and num2 is < 110.
-Both num1 and num2 contains only digits 0-9.
-Both num1 and num2 does not contain any leading zero.
-You must not use any built-in BigInteger library or convert the inputs to integer directly.

題目要求輸入兩個以字符串形式表示的正整數,要求咱們求出它們的乘積,一樣也是字符串形式表示。要求不能直接將字符串轉換爲整數進行乘法運算。git

想法

  • 這道題的思路就是將咱們平時手算多位數乘法的計算方法,轉換成程序語言。
  • 對於兩個長度分別爲m,n的字符串,乘法操做得到的字符串res長度爲m+n(第一位能夠是0)
  • 首先咱們看一下下面這張圖

300d71f784f679d5e70fadda8ad7d68f

  • 這個例子裏咱們的操做順序是,用5分別乘以1,2,3;隨後再用4分別乘以1,2,3.每次對位的乘法操做咱們默認他會得到一個兩位數(第一位能夠是0)
  • 若是進行乘法操做的兩位在各自字符串中的位置爲i和j,那麼生成的兩位數在結果字符串res中對應的位置應當是i+j和i+j+1
  • 將乘法結果和對應位置上的已有數相加,再將結果放到對應位置。

解法

public String multiply(String num1, String num2) {
        int m = num1.length();
        int n = num2.length();
        int[] pos = new int[m+n];
        
        //計算
        for(int i=m-1;i>=0;i--){
            for(int j=n-1;j>=0;j--){
                int mul = (num1.charAt(i)-'0')*(num2.charAt(j)-'0');
                int p1 = i + j;
                int p2 = i + j + 1;
                
                int sum = mul + pos[p2];
                pos[p1] += sum / 10;
                pos[p2] = sum % 10;
            }
        }
        
        StringBuilder sb = new StringBuilder();
        for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
        return sb.length() == 0 ? "0" : sb.toString();
    }
相關文章
相關標籤/搜索