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)或直接将输入转换为整数来处理。

解题思路:我们需要利用程序模拟竖式相乘的过程
我们可以用一个数组来表示:res
图片说明 **
**最后我们只需要确认乘积在结果数组中的下标和i和j的关系即可

不难得出:num1【i】和num2【j】的乘积在res中的下标为i+j和i+j+1.其中(i+j+1为低位)
那么res最多有m+n位。我们求结果时需要先排除前边的0.
图片说明

class Solution {
    public String multiply(String num1, String num2) {
        int m=num1.length();
        int n=num2.length();
        int[] res=new int[m+n];
        for(int i=m-1;i>=0;i--){
            for(int j=n-1;j>=0;j--){
                int mul=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
                int p1=i+j+1;
                int p2=i+j;
                //累加结果到res数组:其中p1为低位下标,p2为高位
                int sum=res[p1]+mul;
                res[p1]=sum%10;
                res[p2]+=sum/10;
            }
        }
        //去除结果数组前侧的0
        int i=0;
        while(i<res.length && res[i]==0){
            i++;
        }
        //求得结果
        String str="";
        for(;i<res.length;i++){
            str+=res[i];
        }
        //如果字符串为空,应该返回0
        return str.length()==0?"0":str;
    }
}