加一
题目描述:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
题目分析:
这道题的重点应该就是 进位的转移,要把进位传给下一位数字,这和一些用 数组存储大数的原理 是一样的,传递进位
用 num或者 key 来存储传给下一位的进位数据,跟随循环传给下一位
需要注意的地方:
1,存储进位数据
2,循环的判断条件
3,进位的传递
4,新数组的生成和返回
代码展示(已验证):
java
//leetcode-java
class Solution {
public int[] plusOne(int[] digits)
{
int num=0;
int i=digits.length-1;
int[] digits1 = new int[digits.length+1]; //用来返回特定数组 99-->100
digits[i] +=1;
num = digits[i]/10;
digits[i] %= 10;
while(num>0 && i>0) //进入循环的条件就是 数值有进位
{
digits[--i] += num;
if(digits[i] >= 10) // 判断在向上进位的过程中是否有进位
{
num = digits[i]/10;
digits[i] %= 10;
}
else
num=0;
}
if(num >0) // 如果最后一位 还有进位,就说明进位为 1,然后输出 特定数组,除了第一位,其他都是0
{
digits1[0]=1;
for(int j=1; j<=digits.length; j++)
digits1[j] = 0;
return digits1;
}
return digits;
}
}
python
// leetcode-python
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
# 反向切片的数组赋值给 l[]
l = digits[::-1]
l[0] +=1
for i in range(len(l)):
if(l[i]>9):
l[i] -= 10
if i != len(l) - 1:
# 进位上传
l[i+1] += 1
else:
l.append(1)
# 将进位加到 数组后面
# 再反向切片输出
return l[::-1]
泡泡:
进位传递的思想和用法还是比较多的,数组存储大数就是典型的应用,注意一下 循环的 结束条件和进位的传递就好了。