码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode415. 字符串相加

时间:2021-06-02 12:43:28      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:指针   rev   sci   两数相加   return   题目   数加   public   计算   

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();
    }

LeetCode415. 字符串相加

标签:指针   rev   sci   两数相加   return   题目   数加   public   计算   

原文地址:https://www.cnblogs.com/mx-info/p/14816741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!