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

字符串相加 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();
    }
}

你可能感兴趣的:(算法,leetcode)