leetcode------Multiply Strings

标题: Multiply Strings
通过率:  20.8%
难度: 中等

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

本题是模拟大数字的相乘,如果用java的bigInteger去处理的话就没有本题的实际意义了,本题想要做的就是模拟乘法,乘法如何计算很容易判断,

难度就是模拟计算,用一个数组去储存临时的数据,然后一个进位缓存,去保存进位,本题难度就是位置的确定。

直接看代码如何处理:

 1 public class Solution {

 2     public String multiply(String num1, String num2) {

 3                   int len1=num1.length(),len2=num2.length(),numTemp1=0,numTemp2=0,carry=0,sum=0;

 4             String result="";

 5             if(len1==0||len2==0)return "0";

 6             int [] tmpArray=new int[len1+len2];

 7             int location=0;

 8             for(int i=0;i<len1;i++){

 9                 numTemp1=Integer.valueOf(num1.charAt(len1-i-1)-'0');

10                 carry=0;

11                

12                 for(int j=0;j<len2;j++){

13                     numTemp2=Integer.valueOf(num2.charAt(len2-j-1)-'0');

14                     sum=numTemp1*numTemp2+tmpArray[len1+len2-j-i-1]+carry;

15                     carry=sum/10;

16                     sum=sum%10;

17                     tmpArray[len1+len2-j-i-1]=sum;

18                     location=j;

19                 }

20                if(carry!=0)tmpArray[len1+len2-i-location-2]+=carry;

21                 

22             }

23             int start=0;

24             for(;start<len1+len2;start++){                

25                 if(tmpArray[start]!=0)break;

26             }

27             if(start==(len1+len2))return "0";

28             for(;start<len1+len2;start++){

29                 result+=tmpArray[start];

30                 

31             }

32             return result;

33             

34         

35     }

36 }

 python代码:

 1 class Solution:

 2     def multiply(self, num1, num2):

 3         num1, num2 = num1[::-1], num2[::-1]

 4         result = [0 for i in range(len(num1) + len(num2))]

 5         for i in range(len(num1)):

 6             for j in range(len(num2)):

 7                 result[i + j] += int(num1[i]) * int(num2[j])

 8         carry, total = 0, []

 9         for digit in result:

10             sum = carry + digit

11             carry = sum / 10

12             total.insert(0, str(sum % 10))

13         while len(total) > 1 and total[0] == "0":

14             del total[0]

15         return ''.join(total)

 

你可能感兴趣的:(LeetCode)