【leetcode刷题】[简单]415. 字符串相加(add strings)-java

117 篇文章 0 订阅

字符串相加 add strings

题目

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

  1. num1 和num2 的长度都小于 5100.
  2. num1 和num2 都只包含数字 0-9.
  3. num1 和num2 都不包含任何前导零。
  4. 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。

代码模板:

class Solution {
    public String addStrings(String num1, String num2) {
        
    }
}

分析

首先算出num1和num2的长度最大和差值,如果是短的,前面就用0来补充。然后开始运算,从末尾开始charAt,如果大于9,看是否有进位,有进位进行+1然后%10,并且将isAdd置为true。如果小于9,那么看上一个isAdd的值来决定是否+1然后%10,并且将isAdd置为false,如此循环,最后看isAdd,看是否要加上一个1。最后反向然后toString()

解答

class Solution {
    public String addStrings(String num1, String num2) {
        int lenNum1 = num1.length();
        int lenNum2 = num2.length();
        int len = Math.max(lenNum1, lenNum2);
        int zeroCount = Math.abs(lenNum1 - lenNum2);
        StringBuilder str = new StringBuilder();
        for (int i = 0 ; i < zeroCount; i++) {
            str.append("0");
        }
        if (lenNum1 > lenNum2) {
            num2 = str + num2;
        } else {
            num1 = str + num1;
        }

        StringBuilder curr = new StringBuilder();
        boolean isAdd = false;
        for (int i = 0; i < len; i++) {
            Integer num1Int = num1.charAt(len - i - 1) - '0';
            Integer num2Int = num2.charAt(len - i - 1) - '0';

            int c = num1Int + num2Int;
            if (c > 9) {
                if (isAdd) {
                    curr.append((c + 1) % 10);
                    isAdd = true;
                } else {
                    curr.append(c % 10);
                    isAdd = true;
                }
            } else {
                if (isAdd) {
                    if (c + 1 > 9) {
                        isAdd = true;
                        curr.append((c + 1) % 10);
                    } else {
                        curr.append(c + 1);
                        isAdd = false;
                    }
                } else {
                    curr.append(c);
                    isAdd = false;
                }
            }
        }

        if (isAdd) {
            curr.append("1");
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值