leetcode989. 数组形式的整数加法

题目要求

看到这道题刚开始我的解题思路是将整数K分解,并依次放入一个新建好的数组中,然后同给的数组按位相加,标记进位。但是怎么把整数K分解成一个数组难倒了我。
等以后有时间我会把我的这种方法写出来 今晚实在不想动脑筋。

官方解题思路来源leetcode官方题解
这个官方解题思路真的是赞啊,一看到两数相加当然想到按位相加,对10整除求出进位和对10求模求出对应位相加的结果。这个思路要积累。

我写的代码


```cpp
class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K)
     {
        int i=A.size()-1;
        int tempAnswer=K;
        vector<int> B;
        while(tempAnswer>0||i>=0)
        {
            if(i>=0){
            tempAnswer=tempAnswer+A[i--];}
        
            B.push_back(tempAnswer%10);
            tempAnswer=tempAnswer/10;
        }
        reverse(B.begin(),B.end());
        return B;
    }
};

notes
这里面两个点需要注意!!!
第一个就是while循环语句中的条件 要把临时相加的答案大于 0而不是>=0
如果是大于等于0那这样就会一直当加到给定整数k的最高位 由于得到的临时相加答案永远等于0 这样将会导致while循环会一直循环下去,导致超出内存限制错误的产生。这是我提交代码时出现过的问题!!1

第二个需要注意的问题就是 while循环判断语句中 两个循环条件是或的关系 所以只要其中一个满足就可以
所以还要加一个if语句 来判断数组A的下标是否小于0,如果没加这个条件,也会出现错误!!!
所以while循环条件真的很重要!!!缺一不可!!

tips
i-- 先用的是i之前的值 用完之前的值再对i进行减1操作。

昨天晚上想了好久 为什么我写的将整数转换为数组的程序就是不对呢,今天上午终于知道错误在哪里了嘿嘿嘿 ,但是运行速度是很慢的,所以还是要学习标准答案。话不多说,上代码。
在这里插入图片描述

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K) {
        vector<int> b;
        int tempK=K;
        while(tempK>0)
        {
            b.push_back(tempK%10);
            tempK=tempK/10;
        }
        reverse(b.begin(),b.end());
        int p=A.size();
        int q=b.size();
        int length=p>=q?p-q:q-p;
        if(length>0)
        {
            for(int i=0; i<length;++i)
            {
                if(p>q)
                {
                    b.insert(b.begin(),0);
                }
                else
                {
                    A.insert(A.begin(),0);
                }
            }
        }

        vector<int> result;
        int Length=A.size();
        int carry=0;
        for(int j=Length-1;j>=0;--j)
        {
            result.push_back((A[j]+b[j]+carry)%10);
            carry=(A[j]+b[j]+carry)/10;
           
        }
        if(carry==1)
        {
            result.push_back(carry);
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

用到的就是2两数相加listnode的思想。刚开始运行错误的原因是因为我没把进位加进去,这里还温习了一个新的语法,就是像向量的任意位置插入元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值