码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 43 字符串相乘

时间:2020-11-08 17:04:07      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:pre   tostring   pen   ==   ring   代码   class   new   +=   

LeetCode43 字符串相乘

题目描述

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

样例

输入: num1 = "2", num2 = "3"
输出: "6"
输入: num1 = "123", num2 = "456"
输出: "56088"

算法分析

  • A[i],B[i],逆序存储,A[i]*B[j] = C[i+j]
  • 存储之后,在标准化,每一位是十进制化
  • 找到第一个不为零的

时间复杂度

Java代码

class Solution {
    public String multiply(String num1, String num2) {
        if(num1.equals("0") || num2.equals("0")) return "0";
        int n = num1.length();
        int m = num2.length();
        int[] a = new int[n];
        int[] b = new int[m];
        for(int i=0;i<n;i++){
            a[i] = num1.charAt(n-i-1) - ‘0‘;
        }
        for(int j=0;j<m;j++){
            b[j] = num2.charAt(m-j-1) - ‘0‘;
        }
        int[] c = new int[n+m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                c[i+j] += a[i]*b[j];
            }
        }

        int t = 0;
        for(int i = 0; i<n+m; i++){
            t += c[i];
            c[i] = t%10;
            t/=10;
        }
        int k = n+m-1;
        while(k>=0 && c[k]==0) k--;


        StringBuilder sb = new StringBuilder("");
        for(int i = k; i>=0; i--){
            sb.append(c[i]);
        }
        return sb.toString();

    }
}

LeetCode 43 字符串相乘

标签:pre   tostring   pen   ==   ring   代码   class   new   +=   

原文地址:https://www.cnblogs.com/vccyb/p/13941074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!