zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    第二次:Ubuntu16.04 安装Docker
    第一次:从今开始玩Linux,Ubuntu16.04
    学习日常
    Vector和ArrayList的异同、Hashtable和HashMap的异同
    如何吃透Python的面向对象(OOP)
    Python基础(下篇)
    Python基础(中篇)
    Python基础(上篇)
    Pycharm安装
    Python的安装与配置
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4286177.html
Copyright © 2011-2022 走看看