43. 字符串相乘--🀄️


43. 字符串相乘

难度中等 574
给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例  2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
说明:

  1. num1num2 的长度小于 110。
  2. num1num2 只包含数字 0-9
  3. num1num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理
class Solution {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        int m = num1.length(), n = num2.length();
        int[] ansArr = new int[m + n];//最多位数
        for (int i = m - 1; i >= 0; i--) {
            int x = num1.charAt(i) - '0';//字母转数字 倒序
            for (int j = n - 1; j >= 0; j--) {
                int y = num2.charAt(j) - '0';
                ansArr[i + j + 1] += x * y;
            }
        }
        for (int i = m + n - 1; i > 0; i--) {
            ansArr[i - 1] += ansArr[i] / 10;
            ansArr[i] %= 10;//进位处理
        }
        int index = ansArr[0] == 0 ? 1 : 0;//去掉前缀0
        StringBuffer ans = new StringBuffer();
        while (index < m + n) &#123;
            ans.append(ansArr[index]);
            index++;
        &#125;
        return ans.toString();
    &#125;
&#125;

文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
剑指 Offer 14- I. 剪绳子 剑指 Offer 14- I. 剪绳子
剑指 Offer 14- I. 剪绳子难度中等 168给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n 都是整数,n>1 并且 m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0
下一篇 
剑指 Offer 32 - III. 从上到下打印二叉树 III--🀄️ 剑指 Offer 32 - III. 从上到下打印二叉树 III--🀄️
剑指 Offer 32 - III. 从上到下打印二叉树 III难度中等 76请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如:给定
  目录