这是悦乐书的第371次更新,第399篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第233题(顺位题号是989)。对于非负整数XX的数组形式是从左到右顺序的数字数组。例如,如果X = 1231,则数组形式为[1,2,3,1]

给定非负整数X的数组形式A,返回整数X + K的数组形式。例如:

输入:A = [1,2,0,0],K = 34

输出:[1,2,3,4]

说明:1200 + 34 = 1234

输入:A = [2,7,4],K = 181

输出:[4,5,5]

说明:274 + 181 = 455

输入:A = [2,1,5],K = 806

输出:[1,0,2,1]

说明:215 + 806 = 1021

输入:A = [9,9,9,9,9,9,9,9,9,9],K = 1

输出:[1,0,0,0,0,0,0,0,0,0,0]

说明:9999999999 + 1 = 10000000000

注意

  • 1 <= A.length <= 10000

  • 0 <= A [i] <= 9

  • 0 <= K <= 10000

  • 如果A.length > 1,则A[0]!= 0。

02 第一种解法

题目的意思是要我们把K(低位到高位)每一位数加到A(从后往前)中对应位上,最后输出一个List

思路:先处理K,每次拿A的个位数,使用对10取余得到,再从A中取一位数出来(从后往前),两数相加,需要判断是否有进位产生,将和添加进List中,K再除以10,切换到新的个位数,直到K等于0。处理完K后,如果A中还有数没处理完,需要再处理下,在前面处理K时遗留的进位依旧需要参与运算,直到处理完A中所有元素。最后,如果存进位的变量还有值,则需要将其添加进List中。因为处理数据是从后往前的顺序,所以需要将List反转,借助Collectionsreverse方法完成。

public List<Integer> addToArrayForm(int[] A, int K) {
List<Integer> result = new ArrayList<Integer>();
int i = A.length-1, tem = 0;
while (K > 0) {
// i需要判断一次,因为A的长度可能比K的位数小
int current = K%10 + (i >=0 ? A[i--] : 0) + tem;
// 大于10会产生进位
if (current >= 10) {
current -= 10;
tem = 1;
} else {
tem = 0;
}
result.add(current);
K /= 10;
}
// 如果K已经处理完了,但是A中还有数没有处理
while (i >= 0) {
// 依旧需要判断进位
if (A[i]+tem >= 10) {
result.add(A[i]+tem-10);
tem = 1;
} else {
result.add(A[i]+tem);
tem = 0;
}
i--;
}
// 判断最高位是否存在进位
if (tem != 0) {
result.add(tem);
}
// 反转result
Collections.reverse(result);
return result;
}

03 第二种解法

我们还可以对第一种解法再简化下。

思路:将A中每次从后往前取的数,加到K上面(K最大为10000,不存在越界问题),然后每次取K的最后一位数(借助取余),计算完后将K除以10,直到K等于0。

public List<Integer> addToArrayForm2(int[] A, int K) {
List<Integer> result = new ArrayList<Integer>();
int i = A.length-1, tem = K;
while (i >= 0 || tem > 0) {
if (i >= 0) {
tem += A[i--];
}
result.add(tem%10);
tem /= 10;
}
// 反转result
Collections.reverse(result);
return result;
}

04 小结

算法专题目前已连续日更超过七个月,算法题文章239+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.989-数组形式的整数做加法(Add to Array-Form of Integer)的更多相关文章

  1. [Swift]LeetCode989. 数组形式的整数加法 | Add to Array-Form of Integer

    For a non-negative integer X, the array-form of X is an array of its digits in left to right order.  ...

  2. 52. 不用+、-、×、÷做加法[add two numbers without arithmetic]

    [本文链接] http://www.cnblogs.com/hellogiser/p/add-two-numbers-without-arithmetic.html [题目] 写一个函数,求两个整数的 ...

  3. 力扣(LeetCode)整数形式的整数加法 个人题解

    对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组.例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]. 给定非负整数 X 的数组形式 A,返回整数 X+K 的 ...

  4. 剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

    剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers) https://leetcode.com/problems/sum-of-two-in ...

  5. 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法

    (本文是专门针对未接触过C/S开发的初学者而写的,C/S开发高手请自动忽略啊~~) 还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看 ...

  6. 最简单的C/S程序——让服务器来做加法

    还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看怎么让服务器帮咱做加法! 所谓C/S程序就是Client/Server程序,自然既包 ...

  7. [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers

    引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...

  8. POJ2155/LNSYOJ113 Matrix【二维树状数组+差分】【做题报告】

    这道题是一个二维树状数组,思路十分神奇,其实还是挺水的 题目描述 给定一个N∗NN∗N的矩阵AA,其中矩阵中的元素只有0或者1,其中A[i,j]A[i,j]表示矩阵的第i行和第j列(1≤i,j≤N)( ...

  9. 【剑指Offer】不用加减乘除做加法 解题报告(Java)

    [剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

随机推荐

  1. 浏览器自动将参数中的url转码问题

    遇到一个问题, 开始的url如下: http://localhost:6666/pages/wxpay.html? code_url=weixin://wxpay/biz 请求转发到谷歌浏览器打开后变 ...

  2. (转载)搜索引擎的Query自动纠错技术和架构详解

    from http://www.52nlp.cn/%E8%BE%BE%E8%A7%82%E6%95%B0%E6%8D%AE%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E7 ...

  3. “M_PI_2”: 重复定义的宏

    问题警告:“M_PI_2”: 重复定义的宏 分析:在Visual Studio上使用math.h库时与其他库数学库冲突,我们可以通过添加宏定义“_USE_MATH_DEFINES”来消除math.h定 ...

  4. C# 桌面截屏 添加鼠标

    #region 第一种方法 [DllImport("user32.dll")] static extern bool GetCursorInfo(out CURSORINFO pc ...

  5. 51 Nod 不一样的猜字游戏

    1536 不一样的猜数游戏  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 瓦斯亚和皮台亚在玩一个简单的游戏.瓦 ...

  6. poj 2761 主席树的应用(查询区间第k小值)

    Feed the dogs Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 22084   Accepted: 7033 De ...

  7. Spark 电子书

    Spark最佳实践 (陈欢/林世飞著) 完整pdf扫描版[39MB]http://pan.baidu.com/s/1i4LNOVVSpark SQL编程指南 (Spark 官方文档翻译) 中文PDF版 ...

  8. 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec  内存限制: 259 MB 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他 ...

  9. python3 set集合,以及字典,使用技巧

    #set集合,无序不可重复setjh={'ofgh','gegds','uutytr'} setjh.add('uuuuu')#添加单个元素setjh.remove('ofgh')#删掉单个元素pri ...

  10. Spring-data-redis 第一天

    1.Redis 这就不必哆嗦了,Redis 支持丰富的数据类型,String ,List,Sets ,Sorted Sets,Hashes,这就可以看出Java 操作Redis就要针对各种类型都有自己 ...