zoukankan      html  css  js  c++  java
  • 【力扣】43. 字符串相乘

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

    示例 1:

    输入: num1 = "2", num2 = "3"
    输出: "6"
    示例 2:

    输入: num1 = "123", num2 = "456"
    输出: "56088"
    说明:

    num1 和 num2 的长度小于110。
    num1 和 num2 只包含数字 0-9。
    num1 和 num2 均不以零开头,除非是数字 0 本身。
    不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/multiply-strings

    时间复杂度:有个二层循环 O(m*n) 

    空间复杂度为:O(m+n)  有个数组

    前提:num1 和 num2 都不是0 ,那么他们相乘的结果的长度为 m+n-1 或者是 m+n

    public String multiply(String num1, String num2) {
            //整体思路: 例如:num1 = "123", num2 = "456"
            if("0".equals(num1) || "0".equals(num2)){
                return "0";
            }
            int m = num1.length();
            int n = num2.length();
            int [] resultArray = new int[m+n];
    
            //计算乘数 
            for(int i = m-1; i >= 0; i--){
                int tempi = num1.charAt(i) - '0';
                for(int j = n-1; j >= 0; j--){
                    int tempj = num2.charAt(j) - '0';
                    resultArray[i+j+1] += tempi * tempj;
                }
            }
            //进位
            for(int i = m+n-1 ;i>0; i--){
                resultArray[i-1] += resultArray[i]/10;
                resultArray[i] = resultArray[i]%10;
            }
            int index = resultArray[0] == 0 ? 1 : 0;
            StringBuilder builder = new StringBuilder();
            for(;index < resultArray.length;index++){
                builder.append(resultArray[index]);
            }
            return builder.toString();
        }
    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    6993: Dominoes(纯bfs)
    PHP学习笔记
    Android学习笔记
    大数据(笔记)
    第七周进度总结
    记账本NABCD分析
    第七周学习进度总结
    《构建之法》读书笔记(一)
    jdbc 连接数据库
    4月10日随笔
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13496625.html
Copyright © 2011-2022 走看看