Multiply Strings

这题是brute force,涉及到乘法的原理。
提交了很多次,涉及到mod,carry的这种题还是要多总结。涉及到charAt的对比要注意用单引号修饰后面的数字。

    public String multiply(String num1, String num2) {
        if (num1.length() == 0 || num2.length() == 0) return null;
        if (num1.charAt(0) == '0' || num2.charAt(0) == '0') return "0";
        String n1 = new StringBuilder(num1).reverse().toString();
        String n2 = new StringBuilder(num2).reverse().toString();
        //the max length
        int totalLen = num1.length() + num2.length();
        int[] digit = new int[totalLen];
        for (int i = 0; i < num1.length(); i++) {
            for (int j = 0; j < num2.length(); j++) {
                //已犯错误1 这里写成了= 而不是+=
                digit[i + j] += (n1.charAt(i) - '0') * (n2.charAt(j) - '0');
            }
        }

        //这里再一次更新digit数组的每一位
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < totalLen; i++) {
            int carry = digit[i] / 10;
            int mod = digit[i] % 10;
            if (i + 1 < totalLen) {
                //更新下一位digit
                digit[i + 1] = digit[i + 1] + carry;
            }
            //insert放外面,否则最后一位insert不了了
            res.insert(0, mod);
        }

        //最后一位没进位的情况
        if (res.charAt(0) == '0' ) {
            res.deleteCharAt(0);
        }
        return res.toString();
    }

--
http://www.programcreek.com/2014/05/leetcode-multiply-strings-java/

你可能感兴趣的:(Multiply Strings)