算法-leetcode-字符串问题- 415. 字符串相加

415. 字符串相加

https://leetcode-cn.com/problems/add-strings/

思路: 分别遍历个位,十位,百位等等,每位加和,如果超过10,则进位保留,下一次加在高位上

  • 遍历终止条件:两字符串最大长度-1
  • 注意事项:遍历结束,如果仍然有进位,记得把最后一位给加上
  • 结果通过StringBuilder倒序拼接,最后再反转即可
package com.shangguigu.dachang.algrithm.A03_Strings;

/**
 * @author : 不二
 * @date : 2022/4/8-上午8:15
 * @desc : 415. 字符串相加
 * https://leetcode-cn.com/problems/add-strings/
 *
 *
 **/
public class A30_addStrings {
    public static void main(String[] args) {
        String num1 = "1", num2 = "9";
        String s = addStrings(num1, num2);
        System.out.println("结果是:" + s);
    }

    public static String addStrings(String num1, String num2) {
        int l1 = num1.length()-1;
        int l2 = num2.length()-1;
        // 遍历位数,哪个位数多,就按照多的位数个数进行遍历
        // 从个位开始遍历
        int step = Math.max(l1, l2);
        StringBuilder builder = new StringBuilder();

        // 这个是进位
        int carry = 0;

        for (int i = step; i >= 0; i--) {
            // 最高位是:
            int l1Pos = i - (step-l1);
            System.out.println(l1Pos);
            int c1 = 0;
            if (l1Pos >= 0) {
                c1 = num1.charAt(l1Pos) - '0';
            }

            int l2Pos = i - (step - l2);
            System.out.println(l2Pos);
            int c2 = 0;
            if (l2Pos >= 0) {
                c2 = num2.charAt(l2Pos) - '0';
            }

            int tmp = c1 + c2;
            // 如果前面的进位不为0, 则需要添加到tmp上,方便追加
            if (carry != 0) {
                tmp += carry;
            }
            builder.append(tmp % 10);
            carry = tmp / 10;
        }

        // 遍历完之后,如果还有进位,则需要单独进位
        if (carry != 0) {
            builder.append(carry);
        }

        return builder.reverse().toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值