美文网首页
[刷题防痴呆] 0043 - 字符串相乘 (Multiply S

[刷题防痴呆] 0043 - 字符串相乘 (Multiply S

作者: 西出玉门东望长安 | 来源:发表于2021-10-23 01:08 被阅读0次

    题目地址

    https://leetcode.com/problems/multiply-strings/description/

    题目描述

    43. Multiply Strings
    
    Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.
    
    Example 1:
    
    Input: num1 = "2", num2 = "3"
    Output: "6"
    Example 2:
    
    Input: num1 = "123", num2 = "456"
    Output: "56088"
    

    思路

    • 模拟两数相乘.
    • 两数相乘得到的乘积的长度其实其实不会超过两个数字的长度之和, 若 num1 长度为m, num2 长度为n,则 num1 * num2 的长度不会超过 m+n.
    • num1 和 num2 中任意位置的两个数字相乘, 得到的两位数在最终结果中的位置是确定的, 比如 num1 中位置为i的数字乘以 num2 中位置为j的数字, 那么得到的两位数字的位置为 i+j 和 i+j+1.

    关键点

    • 从后往前计算.
    • 前面的0需要删掉. 然后每一位加入到StringBuffer中.
    • 如果最后StringBuffer还是空, 则return "0".

    代码

    • 语言支持:Java
    class Solution {
        public String multiply(String num1, String num2) {
            int m = num1.length();
            int n = num2.length();
    
            int[] arr = new int[m + n];
            for (int i = m - 1; i >= 0; i--) {
                for (int j = n - 1; j >= 0; j--) {
                    int product = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
                    int p1 = i + j;
                    int p2 = i + j + 1;
                    int sum = arr[p2] + product;
                    arr[p1] += sum / 10;
                    arr[p2] = sum % 10;
                }
            }
    
            StringBuffer sb = new StringBuffer();
            int index = 0;
            while (index < arr.length && arr[index] == 0) {
                index++;
            }
            while (index < arr.length) {
                sb.append(arr[index]);
                index++;
            }
            if (sb.length() == 0) {
                return "0";
            }
            return sb.toString();
        }
    }
    

    相关文章

      网友评论

          本文标题:[刷题防痴呆] 0043 - 字符串相乘 (Multiply S

          本文链接:https://www.haomeiwen.com/subject/yiaxaltx.html