leetcode (字符串相加 + 字符串相乘)解法

1、字符串相加

解题思路

  1. 循环遍历每一个元素
  2. 遍历两数 定义一个变量
  3. 相加 并 加上 可能存
  4. 取余 赋值给对应的位置
  5. 递减下标
  6. return结果
 		/**
         *    解题思路
         * 1、循环遍历每一个元素
         * 2、遍历两数 定义一个变量接受 以charAt 截取的每一个字符 ('- 0' 因为该方法取出的值为ascii码 所以需要减去 字符'0' 获得对应的数值)
         * 3、相加 并 加上 可能存在的进位标识
         * 4、取余 赋值给对应的位置
         * 5、递减下标
         * 6、return结果
         */
    public String addStrings(String num1, String num2) {
        int n1 = num1.length() - 1;
        int n2 = num2.length() - 1;
        int flag = 0;
        StringBuffer s = new StringBuffer();

        while (n1 >= 0 || n2 >= 0 || flag != 0){
            System.out.println(num1.charAt(n1));
            int i = n1 >= 0 ? num1.charAt(n1) - '0'  : 0;
            int j = n2 >= 0 ? num2.charAt(n2) - '0'  : 0;

            int sum = i + j + flag;

            s.append(sum % 10);
            flag = sum / 10;

            n1--;n2--;
        }
        return s.reverse().toString();
    }

2、字符串相乘

解题思路

  1. 定义一个数组长度为 两数长度之和 (两数相乘的 '积’最大的长度为两数长度相加之和 )
  2. 遍历两数 定义一个变量接受 以charAt 截取的每一个字符 (‘- 0’ 因为该方法取出的值为ascii码 所以需要减去 字符’0’ 获得对应的数值)
  3. 相乘 并 加上 数组末尾可能已存在的元素
  4. 取余 赋值给对应的位置
  5. 取商 赋值给对应的位置
  6. 遍历数组 赋值return数值
public String multiply(String num1, String num2) {
        /**
         * 解题思路
         * 1、定义一个数组长度为 两数长度之和 (两数相乘的 '积'最大的长度为两数长度相加之和 )
         * 2、遍历两数 定义一个变量接受 以charAt 截取的每一个字符 ('- 0' 因为该方法取出的值为ascii码 所以需要减去 字符'0' 获得对应的数值)
         * 3、相乘 并 加上 数组末尾可能已存在的元素
         * 4、取余 赋值给对应的位置
         * 5、取商 赋值给对应的位置
         * 6、遍历数组 赋值return数值
         */

        if (num1.equals("0") || num2.equals("0"))
            return "0";

        int [] nums = new int[num1.length() + num2.length()];

        for (int i = num1.length()-1; i >= 0; i--) {
            int n1 = num1.charAt(i) - '0';
            for (int j = num2.length()-1; j >= 0; j--) {
                int n2 = num2.charAt(j) - '0';

                int sum = n1 * n2 + nums[i+j+1] ;
                nums[i+j+1] = sum  % 10;
                nums[i+j] += sum / 10;
            }
        }

        StringBuffer s = new StringBuffer();
        int start = nums[0] == 0 ? 1 : 0;
        for (int i = start; i < nums.length; i++){
            s.append(nums[i]);
        }

        return s.toString();
    }

此解法仅本人自己的思路,如有更优解,欢迎评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值