leetcode_43.字符串相乘

43. 字符串相乘

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

**注意:**不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

复制代码
输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

复制代码
输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1num2 只能由数字组成。
  • num1num2 都不包含任何前导零,除了数字0本身。
代码思路:
  1. 代码获取了输入字符串的长度,并创建了一个数组 temp 用于++存储中间结果++ ,其长度为 len1 + len2 - 1。这是因为两个长度分别为 len1len2 的数字相乘的结果的最大位数为 len1 + len2,但是最高位不会在中间结果中出现。

  2. 接着,两层循环遍历每一位数字,并将它们两两的乘积加到 temp 数组的对应位置上。

  3. 然后,通过一个循环来++处理进位++ ,将 temp 数组中的++每一位进行进位处理++,确保每一位都在 0 到 9 之间。

  4. 最后,代码使用 StringBuilder 将 temp 数组中的每一位数字转换为字符串,并返回结果。

示例:
java 复制代码
class Solution {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) return "0";

        int len1 = num1.length();
        int len2 = num2.length();
        int[] temp = new int[len1 + len2 - 1];

        for (int i = 0; i < len1; i++) {
            for (int j = 0; j < len2; j++) {
                temp[i + j] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
            }
        }

        for (int i = len1 + len2 - 2; i > 0; i--) {
            temp[i - 1] += temp[i] / 10;
            temp[i] %= 10;
        }

        StringBuilder sb = new StringBuilder();
        for (int x : temp) sb.append(x);
        return sb.toString();
    }
}
相关推荐
I AM_SUN1 小时前
994. 腐烂的橘子
数据结构·c++·算法·leetcode·职场和发展
真的想上岸啊1 小时前
c语言第一个小游戏:贪吃蛇小游戏03
c语言·开发语言·算法
Tisfy1 小时前
LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述
leetcode··最短路·dijkstra·题解·迪杰斯特拉
拼好饭和她皆失3 小时前
dfs 第一次加训 详解 下
算法·深度优先
朱剑君10 小时前
第四天——贪心算法——种花
算法·贪心算法
TextIn智能文档云平台10 小时前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
图像处理·人工智能·算法·自然语言处理·pdf·ocr
Panesle11 小时前
HunyuanCustom:文生视频框架论文速读
人工智能·算法·音视频·文生视频
hie9889411 小时前
matlab稳定求解高精度二维对流扩散方程
算法·机器学习·matlab
蓝婷儿11 小时前
前端面试每日三题 - Day 30
前端·面试·职场和发展
买了一束花11 小时前
MATLAB导出和导入Excel文件表格数据并处理
人工智能·算法·matlab