LeetCode415-字符串相加

发布于:2024-07-06 ⋅ 阅读:(44) ⋅ 点赞:(0)

题目

代码

public String addStrings(String num1, String num2) {
        if (num1 == null) {
            return num2;
        }
        if (num2 == null) {
            return num1;
        }
        int min = Math.min(num1.length(), num2.length());
        int abs = Math.abs(num1.length() - num2.length());
        // 0.字符串对齐(补0)
        if (num1.length() == min) {
            num1 = fillZero(abs) + num1;
        }
        if (num2.length() == min) {
            num2 = fillZero(abs) + num2;
        }
        // 1.字符串相加
        boolean carry = false;
        boolean lastCarry = false;
        StringBuilder result = new StringBuilder();
        for (int i = num1.length() - 1; i >= 0; i--) {
            int plus = Integer.parseInt(String.valueOf(num1.charAt(i))) + Integer.parseInt(String.valueOf(num2.charAt(i)));
            if (carry) {
                plus += 1;
            }
            if (plus > 9) {
                carry = true;
            } else {
                carry = false;
            }
            result.append(plus % 10);
            // 并且是最后的进位,需要补1
            if (i == 0 && carry ) {
                lastCarry = true;
            }
        }
        // 2.字符串反转
        String finalString = lastCarry ? "1" + result.reverse() : result.reverse().toString();// 99 + 9
        System.out.println(String.format("%s + %s = %s", num1, num2, finalString));
        return finalString;
    }

    public String fillZero(int abs) {
        StringBuilder zero = new StringBuilder();
        for (int i = 0; i < abs; i++) {
            zero.append("0");
        }
        return zero.toString();
    }

总结

  • 常规的思路就可以解决
  • 先把计算做分解
  • 高位补0或者截取高位都可以处理,但是细想一下补0更方便

网站公告

今日签到

点亮在社区的每一天
去签到