LeetCode415. 字符串相加

LeetCode415. 字符串相加

题目描述

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

思路分析

  1. 按照多位数加法列竖式计算的方式
  2. 定义一个可变长字符串保存计算的结果,定义一个carry保存对应两位是否有进位
  3. 将每次计算的结果以字符从形式追加到字符串,然后保存进位
  4. 注意数字和字符之间的ASCII码差值,字符 - '0'才是对应的数字
  5. 考虑两个数字长度不等的情况,可以在小数字的最高位补0
  6. 详细分析如下

源码及分析

public String addStrings(String num1, String num2) {
        //数据校验
        if ("0".equals(num1) || num1 == null || num1.length() == 0) {
            return num2;
        }
        if ("0".equals(num2) || num2 == null || num2.length() == 0) {
            return num1;
        }
        //定义StringBuffer保存两字符串相加后的值
        StringBuffer buffer = new StringBuffer();
        //定义carry保存两数相加后是否有进位
        int carry = 0;
        //定义i j 指针指向两字符串的最右侧索引
        int i = num1.length() - 1, j = num2.length() - 1;
        //将两数从个数开始依次相加,考虑进位,如果两数长度不相等,则高位补0
        while (i >= 0 || j >= 0 || carry != 0) {
            //考虑两数长度不相同的情况,定义 x y保存对应位上的数字大小
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(j) - '0' : 0;
            int res = x + y + carry;
            buffer.append(res % 10);
            carry = res / 10;
            i--;
            j--;
        }
        return buffer.reverse().toString();
    }
posted @ 2021-05-27 10:14  mx_info  阅读(40)  评论(0)    收藏  举报