LeetCode-43.字元串相乘(考察點:不知道...)

LeetCode-43.字元串相乘(考察點:不知道...)

來自專欄 LeetCode刷題指南

給定兩個以字元串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字元串形式。

示例 1:

輸入: num1 = "2", num2 = "3"輸出: "6"

示例 2:

輸入: num1 = "123", num2 = "456"輸出: "56088"

說明:

  1. num1 和 num2 的長度小於110。
  2. num1 和 num2 只包含數字 0-9。
  3. num1 和 num2 均不以零開頭,除非是數字 0 本身。
  4. 不能使用任何標準庫的大數類型(比如 BigInteger)或直接將輸入轉換為整數來處理

解題思路:兩個字元串位數從右往左數,第一個數的第i位與第二個數的第j位相乘,會影響乘積的第i+j和第i+j-1位

如下圖所示:

單獨求出結果乘積中的每一位,拼接為字元串即為最終結果。

java代碼:

class Solution { public String multiply(String num1, String num2) { if("0".equals(num1) || "0".equals(num2)) return "0"; int len1 = num1.length(), len2 = num2.length(); int A[] = new int[len1 + len2]; for(int i = len1-1; i >= 0; i--){ for(int j = len2-1; j >= 0; j--){ A[len1+len2-2-i-j] += (num1.charAt(i) - 0) * (num2.charAt(j) - 0); } } String result = ""; for(int i = 0; i < len1+len2-1; i++){ A[i+1] += A[i]/10; A[i] %= 10; result = (char)(A[i] + 0) + result; } result = (0 == A[len1+len2-1] ? "" : (char)(A[len1+len2-1]+0)) + result; return result; }}

推薦閱讀:

Leetcodes Solution 40 Combination Sum II
演算法從入門到「放棄」(2)- 分而治之和解決循環
教你編寫一個機器學習代碼也能使用的單元測試

TAG:演算法 | 數據結構 | LeetCode領扣 |