字符串乘法

leetcode字符串乘法题目(大数乘法)

下面分别有我自己的解法和国外有个大佬的解法

package com.color.review01;

import java.util.Arrays;

public class MultiplyString {
    public String multiply1(String num1, String num2) {
        /**
         * 自己的做法
         */
        //把长度短的设置为num2,长的设置为num1
        if(num1.length()=0;i--){
            int n2=num2.charAt(i)-'0';
            for(int j=num1.length()-1;j>=0;j--){
                int n1=num1.charAt(j)-'0';
                int c=str.charAt(cat)-'0';
                str.setCharAt(cat,(char)((n1*n2+c)%10+48));
                carry=(n1*n2+c)/10;
                int k=1;
                while(cat-k>=0&&carry!=0){
                    int ctmp=str.charAt(cat-k)-'0';
                    str.setCharAt(cat-k,(char)((ctmp+carry)%10+48));
                    carry=(carry+ctmp)/10;
                    k++;
                }
                cat--;
            }
            cat+=num1.length()-1;
        }
        //计算完毕,整理结果,把前面的多余0去掉
        String result=str.toString();
        while(result.length()>1&&result.charAt(0)=='0')result=result.substring(1);
        //返回结果值
        return result;
    }

    /**
     * 国外大佬的解法
     * @param num1
     * @param num2
     * @return
     */
    public String multiply2(String num1, String num2) {
        int m = num1.length(), n = num2.length();
        int[] pos = 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, p2 = i + j + 1;
                int sum = mul + pos[p2];

                pos[p1] += sum / 10;
                pos[p2] = (sum) % 10;
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
        return sb.length() == 0 ? "0" : sb.toString();
    }

    public static void main(String[] args) {
        MultiplyString ms=new MultiplyString();
        String rs=ms.multiply2("999","999");
        System.out.println("result:"+rs);
    }
}

参考:国外大佬的解法

你可能感兴趣的:(Java)