⛅(day28)
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
说明:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
说明:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
说明:输入数组表示数字 0。
对于操作方法,本题主要考察列表,字符串和数值间的相互转化。涉及到的转换发方法我们下面分析(了解更多:这些实用的列表,字符串操作你知道吗)
我们可以直接遍历digits列表,提取出每个元素,根据列表长度判断每个数所在位置所有的单位。
如digits = [1, 2, 3]
digits长度为3,1在百位,2在十位,3在个位
那么我们只需要根据数字所在位置不同将其乘上10的倍数即可。
再将所得的数加1即可得到结果数
因为题目要求以列表的形式输出,那么我们可以创建一个空列表,然后遍历结果数将其一个一个加入空列表
但是数值是不能直接遍历的,我们需要将数值用str()函数转换成字符串,遍历后再将其用int()函数转化成数值后加入空列表即可
def plusOne(digits):
number = 0
lst = []
n = len(digits)
for i in range(n):
if i != n-1:
number += digits[i] * (10 ** ((n - 1) - i))
else:
number += digits[i] + 1
for j in range(len(str(number))):
lst.append(int(str(number)[j]))
return lst
def plusOne(digits):
# 初始化
number = 0
lst = []
n = len(digits)
for i in range(n):
"""
根据下标确定数字的单位,但是当i为n-i(最后一位数的下标)时,
((n - 1) - i)=0,所以我们分i != n-1和i = n-1两类讨论
"""
if i != n-1:
number += digits[i] * (10 ** ((n - 1) - i))
else:
number += digits[i] + 1
for j in range(len(str(number))): # 这里的number是数值没有len()属性,所以需要用str()先将其转换成字符串
"""这里的number是数值不能直接遍历,需要用str()先将其转换成字符串,接着再用int()将其转换成数值加入空列表"""
lst.append(int(str(number)[j]))
return lst
看完解法一,两个字形容:麻烦
那么有没有更简便的方法?
当然有,我们回到题目。
题目要求将这个数加一,那么我们知道,digits的最后一位数时个位数。那么我们直接将digits最后一位数加一不就好了
但是我们考虑到最后一位数可能为9,9+1=10,最后一位数变为10有两位数字,违反了题目数组中每个元素只存储单个数字的规则所以,我们需要将倒数第二位加一,然后将最后一位数变为0
我们又考虑到digits倒数第二位数也可能为9,那么我们需要将倒数第三位加一,然后将最后一位数和倒数第二位变为0
以此类推,当digits都为含有的数都为9时,我们需要增添列表长度(增长一个单位),然后将digits中所有的9变成0
def plusOne(digits):
i = -1
while i >= -len(digits):
if digits[i] != 9:
digits[i] += 1
return digits
else:
digits[i] = 0
i -= 1
return [1] + digits
def plusOne(digits):
i = -1 # 初始化i=-1,为后面digits[i] += 1做准备
while i >= -len(digits):
if digits[i] != 9: # 对于加一后不满10的情况
digits[i] += 1
return digits
else: # 加一后满10的情况则将对应位置上的数该为0后
digits[i] = 0
i -= 1 # 改变i的值,进一步判断该位子上的数加1是否满10
return [1] + digits # while循环无结果返回说明digit含有的数字都为9,列表长度需要增1
今天就到这,明天见。
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄