leetcode 043.字符串相乘,两道题解轻松搞定
二哥瞎逼逼:当你习惯了刷题的节奏,每天不来一道会觉得缺点啥,那今天我们就来一道 LeetCode 的中等题:字符串相乘。目前秋招正式批正在如火如荼的开展中,冲啊!下周搞一个星球的打卡活动吧,我翻翻去年的。
题意
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger
库或直接将输入转换为整数。
1 <= num1.length, num2.length <= 200
难度
中等
示例
输入: num1 = "2", num2 = "3"
输出: "6"
输入: num1 = "123", num2 = "456"
输出: "56088"
分析 1
这道题不让我们使用 BigInteger
,我们偏要用一下来看看结果,哈哈😄。
import java.math.BigInteger;
class Solution {
public String multiply(String num1, String num2) {
BigInteger n1 = new BigInteger(num1);
BigInteger n2 = new BigInteger(num2);
return n1.multiply(n2).toString();
}
}
来看一下题解效率:
还不错嘛,击败了 41.56% 的 Java 选手,我只能说,有时候算法的要求真的是很扯,明明有很简单的解决方案,它就是不让我们用。😄
但我们不管,先暴力解出来壮壮胆再说。
不过我多瞅了一眼 BigInteger 的 multiply 方法源码,不简单,有数组,有 for 循环,有位运算。
分析 2
来回忆一下小学阶段,我们是怎么做乘法运算的:
列竖式,计算每一位的乘积,然后错位相加。这也是我们解决这道题的 “灵丹妙药”。
假如输入是 123 * 456
,我们来看一下:
7 3 8
的 第0
位——8 是由123
的 第0
位——3 和456
的 第0
位——6 相乘并向第 1 位进 1 后得到的;7 3 8
的 第1
位——3 是
5 条评论
回复