这是悦乐书的第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. idea 下获取路径下文件的方法

    想读取resouce/temp下的test.txt文件.方式一:File sourceFile = ResourceUtils.getFile("classpath:temp/test.tx ...

  2. 2018年最佳JavaScript数据可视化和图表库

    现在有很多图表库,但哪一个最好用?这可能取决于许多因素,如业务需求,数据类型,图表本身的目的等等.在本文中,每个JavaScript图表库将与一些关键因素进行比较,包括图表类型,商业或免费和开源状态. ...

  3. MyEclipse使用教程:使用工作集组织工作区

    [MyEclipse CI 2019.4.0安装包下载] 工作集允许您通过过滤掉不关注的项目来组织项目视图.激活工作集时,只有分配给它的项目才会显示在项目视图中. 如果您的视图中有大量项目,这将非常有 ...

  4. [LOJ3119][CTS2019|CTSC2019]随机立方体:组合数学+二项式反演

    分析 感觉这道题的计数方法好厉害.. 一个直观的思路是,把题目转化为求至少有\(k\)个极大的数的概率. 考虑这样一个事实,如果钦定\((1,1,1),(2,2,2),...,(k,k,k)\)是那\ ...

  5. KMP的妙用(利用next数组寻找字符串的循环节)

    利用KMP的next数组的性质,我们可以找到next数组的循环节. 先说结论: 设字符串长n,则若其  i % ( i – next[n] ) == 0 ,则其有循环节(循环节数目大于1),其循环节数 ...

  6. github版本库使用详细教程

    GitHubGit 教程[1] 同学们,上课了!今天我们来学习github的使用,我们将用它来管理我们的代码,你会发现它的好处的,当然是要在本系列教程全部完成之后,所以请紧跟站长的步伐,今天是第一天, ...

  7. php 将几个变量合为数组,变量名和值对应

    <?php $firstname = "Bill"; $lastname = "Gates"; $age = "60"; $resul ...

  8. echarts 有关饼形图和map的使用技巧1(饼图)

    http://blog.csdn.net/yhn1121/article/details/52041742 先上个链接,百度无意间搜到的,写得比我全面,可以直接飞去看它: 之前写网页用过echarts ...

  9. windows基础提权

    Window基础提权 提到system权限 甚至让他变成你的肉鸡 我们了解一下windows下面有那些用户 Guests是用户最低的权限 而且一般是被禁用的 User权限也很低 连关机都不行 还有wi ...

  10. 【每日一包0012】to-camel-case,to-no-case,to-space-case

    github地址:https://github.com/ABCDdouyaer/a_pack_per_day_NO.1 to-camel-case 将被其他符号分割的字符串转换为驼峰形式的字符串 用法 ...