前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode刷题(88)——415. 字符串相加

leetcode刷题(88)——415. 字符串相加

作者头像
老马的编程之旅
发布2022-06-22 13:56:45
3120
发布2022-06-22 13:56:45
举报
文章被收录于专栏:深入理解Android

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

提示:

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

我的思路: 1.2个字符串如果长度不一样,则对于短的字符串,前面进行0补位 2.从后面开始相加,因为要处理大于10进位问题,我之前按正序进行相加,就会出现进位出错问题 3.进位还有个问题,就是for循环结束了,第一位可能相加会大于10,这时候需要进位的,所以,需要还要把这个进行添加

代码语言:javascript
复制
class Solution {
    public String addStrings(String num1, String num2) {
           StringBuilder builder = new StringBuilder();
        int length1 = num1.length();
        int length2 = num2.length();
        if(length1>=length2){
            num2 = append0(length1-length2,num2);
        } else{
            num1 = append0(length2-length1,num1);
        }
        int sum = 0;
        for(int i=num1.length()-1;i>=0;i--){
            int a1 = num1.charAt(i) - '0';
            int a2 = num2.charAt(i) - '0';
            int total = a1+a2+sum;
            if(total>=10){
                total = total%10;
                sum = 1;
            }else{
                sum = 0;
            }
            builder.append(total+"");
        }
        if(sum!=0){
            builder.append(sum+"");
        }
        return builder.reverse().toString();
    }

    private String append0(int n,String str){
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<n;i++){
            builder.append("0");
        }
        builder.append(str);
        return builder.toString();
    }
}
在这里插入图片描述
在这里插入图片描述

很明显,自己的写法,执行速度太慢,需要更高效的方式

于是回想其实补0的操作可以不用单独处理,于是有了如下代码,carry = sum/10还是处理比较精妙的

代码语言:javascript
复制
class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder builder = new StringBuilder();
        int length1 = num1.length()-1;
        int length2 = num2.length()-1;
        int carry = 0;
        while(length1>=0||length2>=0){
            int a1 = length1>=0?num1.charAt(length1)-'0':0;
            int a2 = length2>=0?num2.charAt(length2)-'0':0;
            int sum = a1 + a2 + carry;
            builder.append(sum%10);
            carry = sum/10;
            length1--;
            length2--;
        }
        if(carry!=0){
            builder.append(1);
        }
        return builder.reverse().toString();
    }   
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档