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

思路: 简单字符串模拟即可,但是注意,记得补0,再相加.同时循环注意不要死循环

class Solution {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        String sum = "0";
        String s1 = null;
        String s2 = null;

        if (num1.length() > num2.length()) {
            s1 = num1;
            s2 = num2;
        } else {
            s1 = num2;
            s2 = num1;
        }

        for (int i = s2.length()-1; i >=0 ;i--) {
            String nums = "";
            int nex = 0;
            int number = 0;
            int nums2 = s2.charAt(i) - '0';
            for (int j = s1.length()-1;j >= 0;j--) {
                number = (s1.charAt(j)-'0') * nums2 + nex;
                nums  = number%10 + nums;
                nex = number/10;
            }
            if (nex > 0) 
            nums = String.valueOf(nex) + nums;
            // 补0
            for (int m = 0;m < s2.length()-1-i;m++) {
                nums = nums + "0";
            }
            sum = caculate(sum,nums);
        }
        return sum;
    }

    public String caculate(String sum,String nums) {
        int nex = 0;
        String str = "";
        if (sum.equals("0")) {
            str = nums;
        } else {
            
            int i = sum.length() - 1;
            int j = nums.length() - 1;
            while (i >= 0 || j >= 0) {
                int n1 = i < 0 ? 0:sum.charAt(i) - '0';
                int n2 = j < 0 ? 0:nums.charAt(j) - '0';
                int nowsum = n1 + n2 + nex;
                str = (nowsum) %10 + str;
                nex = (nowsum) / 10;
                i--;
                j--;
            }
            if (nex > 0)
                str = String.valueOf(nex) + str;    
        }

        return str;
    }
}

思路2: 网上有竖式乘法

class Solution {
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        
        int[] res = new int[num1.length() + num2.length()];

        for (int i = num1.length()-1; i >=0 ;i--) {
            int nums1 = num1.charAt(i) - '0';
            for (int j = num2.length()-1;j >= 0;j--) {
                int nums2 = num2.charAt(j) - '0';
                int tmp = res[i+j+1] + (nums1 * nums2);
                res[i + j +1 ] = tmp % 10;
                res[i + j] += tmp / 10;
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < res.length; i++) {
            if (i == 0 && res[i] == 0)
            continue;
            sb.append(res[i]);
        }
        return sb.toString();
    }


}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值