多写写 leetcode 43. 字符串相乘
生活随笔
收集整理的這篇文章主要介紹了
多写写 leetcode 43. 字符串相乘
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
難度:中等
頻次:55
題目:
給定兩個以字符串形式表示的非負整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。
注意:不能使用任何內置的 BigInteger 庫或直接將輸入轉換為整數(shù)。
解題思路: 拆出來的乘法最后的結果是string,最后用string+string得出string
注意:
- 前提先掌握字符串的相加
- string下的==和equals的區(qū)別
- 得反轉
代碼
class Solution {public String multiply(String num1, String num2) {// ==和equals的區(qū)別if(num1.equals("0") || num2.equals("0")) return "0";int len1=num1.length();int len2=num2.length();//每一行的計算結果String sum="";//都是從高位到低位for(int i=len2-1;i>=0;i--){StringBuilder temp=new StringBuilder();//乘法進位int carry=0;//補0,因為后面后面會反轉,所以放前面for(int k=0;k<len2-i-1;k++){temp.append('0');}int number2=num2.charAt(i)-'0';for(int j=len1-1;j>=0||carry!=0;j--){//進位int number1=j<0?0:num1.charAt(j)-'0';int a=(number1*number2+carry)%10;temp.append(a);carry=(number1*number2+carry)/10;}//最后記得反轉sum=add(sum,temp.reverse().toString());}return sum;}public String add(String num1,String num2){int len1=num1.length()-1;int len2=num2.length()-1;StringBuilder sum=new StringBuilder();int i=0;int carry=0;while(len1>=0||len2>=0||carry!=0){//這里只需要單獨判斷就行了,不需要放一起int temp1=len1>=0?num1.charAt(len1)-'0':0;int temp2=len2>=0?num2.charAt(len2)-'0':0;sum.append((temp1+temp2+carry)%10);carry=(temp1+temp2+carry)/10;len2--;len1--;}//最后記得反轉return sum.reverse().toString();} }總結
以上是生活随笔為你收集整理的多写写 leetcode 43. 字符串相乘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多看看把,条件太多了--leetcode
- 下一篇: leetcode 470. 用 Rand