生活随笔
收集整理的這篇文章主要介紹了
[Leetcode]第[43]题[JAVA][字符串相乘][字符串相加]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【問(wèn)題描述】[中等]
【解答思路】
1. 普通豎式
**復(fù)雜度:O(N^2) **
class Solution {public String
multiply(String num1
, String num2
) {if (num1
.equals("0") || num2
.equals("0")) {return "0";}String res
= "0";for (int i
= num2
.length() - 1; i
>= 0; i
--) {int carry
= 0;StringBuilder temp
= new StringBuilder();for (int j
= 0; j
< num2
.length() - 1 - i
; j
++) {temp
.append(0);}int n2
= num2
.charAt(i
) - '0';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();}
}
2. 優(yōu)化豎式
復(fù)雜度
class Solution {public String
multiply(String num1
, String num2
) {if (num1
.equals("0") || num2
.equals("0")) {return "0";}int[] res
= new int[num1
.length() + num2
.length()];for (int i
= num1
.length() - 1; i
>= 0; i
--) {int n1
= num1
.charAt(i
) - '0';for (int j
= num2
.length() - 1; j
>= 0; j
--) {int n2
= num2
.charAt(j
) - '0';int sum
= (res
[i
+ j
+ 1] + n1
* n2
);res
[i
+ j
+ 1] = sum
% 10;res
[i
+ j
] += sum
/ 10;}}StringBuilder result
= new StringBuilder();for (int i
= 0; i
< res
.length
; i
++) {if (i
== 0 && res
[i
] == 0) continue;result
.append(res
[i
]);}return result
.toString();}
}
【總結(jié)】
1.列式 找規(guī)律 編程
2.雖然兩者時(shí)間復(fù)雜度和空間復(fù)雜度相同,但優(yōu)化豎式執(zhí)行速度提高很明顯,普通豎式耗時(shí)主要還是對(duì)每步計(jì)算的字符串相加這個(gè)過(guò)程。
轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/multiply-strings/solution/you-hua-ban-shu-shi-da-bai-994-by-breezean/
總結(jié)
以上是生活随笔為你收集整理的[Leetcode]第[43]题[JAVA][字符串相乘][字符串相加]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。