这是悦乐书的第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. 〇——HTML的本质以及在Web程序中的作用

    对于所有的Web应用,其实本质上都是一个socket服务端,用户的浏览器就是一个socket的client,我们看看下面这段代码 import socket def handle_request(cl ...

  2. 第二章 Vue快速入门-- 18 v-for中key的使用注意事项

    注意:如果属性和方法还没定义直接使用的话,就会报   xxx is not defined 导致界面不能正常显示.我看视频教程里老师的可以直接使用,而且界面正常显示,可能是vue版本不同吗?还不清楚 ...

  3. jar包部署在linux上后浏览器访问不到的问题

    1.首先保证程序是正常运行的 2.linux的防火墙是否关闭 3.可能是iptables里面需要设置白名单 可编辑/etc/sysconfig/iptables文件加入应用端口的白名单 修改后执行sy ...

  4. Spring MVC Theme(简单示例)

    在渲染视图的spring-web中,配置them. 实现两个接口就可以使用: ResourceBundleThemeSource  --> 用于确定要使用的主题的名字(theme name) S ...

  5. Ruby笔记

    1.数组遍历方法总结 array = (1..10).to_a length = array.length length.times do t print "#{array[t]} &quo ...

  6. buuctf@ciscn_2019_en_2

    from pwn import * context.log_level='debug' io=process('./ciscn_2019_en_2') libc=ELF('./libc.so') el ...

  7. 在vue2.0中使用bootstarpTable(jquery+bootstarp+bootstarpTable)

    ​ 要想使用bootstarp-table就需要按顺序引入 jquery > bootstarp > bootstarp-table //路径可能会有变动 最好在node_modules ...

  8. 6、Lambda表达式(推荐使用)

    Lambda表达式(匿名的函数对象),是C++11增加的新特性,Qt配合信号一起使用,非常方便. pro项目文件中引入了这种特性: CONFIG += c++11 通过connect来了解Lambda ...

  9. jquery preventDefault()方法 语法

    jquery preventDefault()方法 语法 作用:preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交).大理石平台价格 语法:event ...

  10. poj 3579 Median 二分套二分 或 二分加尺取

    Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5118   Accepted: 1641 Descriptio ...