C++用string实现字符串相加

. - 力扣(LeetCode)  -》》》》》题目链接

实现思路:计算数字符串长度并用数组的方式计算出字符位置,用字符的ask码+‘0’计算出字符本身。

class Solution {
public:
    string addStrings(string num1, string num2) {
        string str;
        int end1 = num1.size()-1 , end2 = num2.size()-1;
        int next = 0;
        while(end1 >= 0 || end2 >= 0)//开始条件
        {
            int a1 = end1 >= 0 ? num1[end1--] -'0' : 0;
            int a2 = end2 >= 0 ? num2[end2--] -'0' : 0;
            int  ret =a1 + a2 + next;
            next = ret / 10; //余数
            ret = ret % 10; //进位数
           str.insert(0, 1, '0' +ret);
        }
        if(next == 1)
        
         str.insert(str.begin() , '1');
        
        return str;
    }   
};

求出字符本身后用string库中自带的insert   表示在下标为0的位置处插入大小为1的字符 

并if判断是否到最后有进位 

 注意时间复杂度为

那应该从那几个方面提高时间复杂度那

  1. 在方法一中是都是在下标为零的位置插入,每插入一次就会移动一次。--》头插在逆置
  2. 每几次相加后都会开一份空间 ---》开一次

 

#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
    string addStrings(string num1, string num2) {
        string str;
        str.reserve(max(num1.size(), num2.size()) + 1);
        int end1 = num1.size() - 1, end2 = num2.size() - 1;
        int next = 0;
        while (end1 >= 0 || end2 >= 0)
        {
            int a1 = end1 >= 0 ? num1[end1--] - '0' : 0;
            int a2 = end2 >= 0 ? num2[end2--] - '0' : 0;
            int ret = a1 + a2 + next;
            next = ret / 10;
            ret = ret % 10;
         //   str += ('0' + ret); //尾插
              str.insert(str.begin(),'0'+ret);//用法一
              //str.insert(0, 1, '0' +ret);//用法二
        }
        if (next == 1)

            str += '1';
        /// str.insert(str.begin() , '1');
        reverse(str.begin(), str.end());//逆置

        return str;
    }
};

reserve 迭代器区间
扩容有消耗 reserve  直接一次性开到最大

 

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值