生活随笔
收集整理的這篇文章主要介紹了
leetcode43. 字符串相乘 经典大数+和*
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
43. 字符串相乘
難度中等264
給定兩個以字符串形式表示的非負整數?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)或直接將輸入轉換為整數來處理。
class Solution {/*** 計算形式* num1* x num2* ------* result*/// 計算結果String res = "0";public String multiply(String num1, String num2) {if (num1.equals("0") || num2.equals("0")) {return "0";}// num2 逐位與 num1 相乘for (int i = num2.length() - 1; i >= 0; i--) {int carry = 0;// 保存 num2 第i位數字與 num1 相乘的結果StringBuilder temp = new StringBuilder();// 補 0 for (int j = 0; j < num2.length() - 1 - i; j++) {temp.append(0);}int n2 = num2.charAt(i) - '0';// num2 的第 i 位數字 n2 與 num1 相乘for (int j = num1.length() - 1; j >= 0 || carry != 0; j--) {int n1 = j < 0 ? 0 : num1.charAt(j) - '0';int product = (n1 * n2 + carry) % 10;temp.append(product);carry = (n1 * n2 + carry) / 10;}// 將當前結果與新計算的結果求和作為新的結果res = addStrings(res, temp.reverse().toString());}return res;}/*** 對兩個字符串數字進行相加,返回字符串形式的和*/public String addStrings(String num1, String num2) {StringBuilder builder = new StringBuilder();int carry = 0;for (int i = num1.length() - 1, j = num2.length() - 1;i >= 0 || j >= 0 || carry != 0;i--, j--) {int x = i < 0 ? 0 : num1.charAt(i) - '0';int y = j < 0 ? 0 : num2.charAt(j) - '0';int sum = (x + y + carry) % 10;builder.append(sum);carry = (x + y + carry) / 10;}return builder.reverse().toString();}
}
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的leetcode43. 字符串相乘 经典大数+和*的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。