字符串——字符串相加

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

        为了处理大数相加,用字符串来存储数字。要处理字符串相加,大致想法是,按照加法对齐,将单个字符用整型表示,相加后将结果分解为进位0或1和某个数字,然后将该数字用字符形式存进字符串。 

按照加法对齐,用双指针的形式来遍历相加。

需要把end1和end2指向的字符转化为数字(减字符0),然后相加,结果是一个整型。将结果分解为进位和单个数字,单个数字存入字符串,进位用于下一次相加。

这里提一下怎么插入字符串,由于加法的规则,每次得到的结果是尾部的数据,所以,需要不断的头插来保证字符的顺序正确,但是头插需要挪动数据(string底层是顺序表),所以效率大打折扣,可以通过尾插O(1)来,然后逆置字符串来替代这种算法。

class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1 = num1.size() -1;
        int end2 = num2.size()-1;
        int next = 0;
        string s3;//结果字符串
        while(end1>=0 ||end2>=0)//两个字符串均要遍历结束
        {
            int val1 = 0,val2 = 0;
            if(end1>=0)
            {
                val1 = num1[end1--]-'0';
            }
            if(end2>=0)
            {
                val2 = num2[end2--] -'0';
            }
            int ret = val1 +val2 +next;//每一次的相加结果
            next = ret / 10;
            ret %= 10;//需要存入结果字符串的字符
            s3.push_back(ret + '0');//尾插
        }
        if(next == 1)//最后一次结果会遗漏的进位
        {
            s3.push_back('1');
        }
        reverse(s3.begin(),s3.end());
        return s3;
    }
};
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值