LeetCode-43.字元串相乘(考察點:不知道...)
來自專欄 LeetCode刷題指南
給定兩個以字元串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字元串形式。
示例 1:
輸入: num1 = "2", num2 = "3"輸出: "6"
示例 2:
輸入: num1 = "123", num2 = "456"輸出: "56088"
說明:
- num1 和 num2 的長度小於110。
- num1 和 num2 只包含數字 0-9。
- num1 和 num2 均不以零開頭,除非是數字 0 本身。
- 不能使用任何標準庫的大數類型(比如 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領扣 |