day2:LeetCode_989:数组形式整数相加

day2:LeetCode_989:
第一次做,真是啥都不会。
其实逐位相加还是想到了,但是java基础太差,写了半天最后在哪里搞成字符串形式做😀,不会算法就只会想到字符串。

官方题解:
方法一:逐位相加
思路

让我们逐位将数字加在一起。例如计算 123+912123+912,我们从低位到高位依次计算 3+23+2、2+12+1 和 1+91+9。任何时候,若加法的结果大于等于 1010,把进位的 11 加入到下一位的计算中,所以最终结果为 10351035。

Java代码:
class Solution {
public List addToArrayForm(int[] A, int K) {
List res = new ArrayList();
int n = A.length;
for (int i = n - 1; i >= 0; --i) {
int sum = A[i] + K % 10;
K /= 10;
if (sum >= 10) {
K++;
sum -= 10;
}
res.add(sum);
}
for (; K > 0; K /= 10) {
res.add(K % 10);
}
Collections.reverse(res);
return res;
}
}
另一个思路是将整个加数 KK 加入数组表示的数的最低位。

上面的例子 123+912123+912,我们把它表示成 [1,2,3+912][1,2,3+912]。然后,我们计算 3+912=9153+912=915。55 留在当前这一位,将 910/10=91910/10=91 以进位的形式加入下一位。

然后,我们再重复这个过程,计算 [1,2+91,5][1,2+91,5]。我们得到 9393,33 留在当前位,将 90/10=990/10=9 以进位的形式加入下一位。继而又得到 [1+9,3,5][1+9,3,5],重复这个过程之后,最终得到结果 [1,0,3,5][1,0,3,5]。

Java代码:

class Solution {
public:
vector addToArrayForm(vector &A, int K) {
vector res;
int n = A.size();
for (int i = n - 1; i >= 0 || K > 0; --i, K /= 10) {
if (i >= 0) {
K += A[i];
}
res.push_back(K % 10);
}
reverse(res.begin(), res.end());
return res;
}
};
复杂度分析

时间复杂度:O(\max(n,\log K))O(max(n,logK)),其中 nn 为数组的长度。

空间复杂度:O(\max(n,\log K))O(max(n,logK))。

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/shu-zu-xing-shi-de-zheng-shu-jia-fa-by-l-jljp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值