给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。
提示:
1
首先,题目描述比较简单,就是用一个数组表示非负整数,比如说[1, 2, 3]就表示整数123,[0]就表示整数0,。
然后题目给出我们数组,我们要计算出这个数组所表示的整数加一后,又将其表示为数组,最终得到结果数组返回回来即可。
这个问题其实较为简单,在python中,我们有两种解法:第一种解法是借助整数和字符串之间的相互转化;第二种方法是通过计算最后得到需要的值,下面一一来看。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
# 使用字符串和整数的相互转换
string_list = ''.join([str(item) for item in digits])
if string_list[0] == '0':
return [1]
else:
number = int(string_list)
number += 1
string = str(number)
number_lst = [int(item) for item in string]
return number_lst
代码思路
首先我们要根据原列表计算出列表代表的数是多少,那么我们可以根据一个公式:
∑(digits[i] * (10 ^ length - i - 1))
其中i
表示数组的偏移,从0
到len(digits)-1
,其中^代表乘方的意思,如2 ^ 3 = 8
上面这个公式不懂的可以自己画一个图来一个个带入看看,最终得到的结果就是这个数组表示的数。
转换成数后,将这个数表示成数组即可,转换的方法也是很常见的算法,在文章的最后有讲到,一定要看到最后哦!
代码实现
直接上代码:
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
# 计算
if digits[0] == 0:
return [1]
if digits[-1] != 9:
digits[-1] = digits[-1] + 1
return digits
number_origin = 0
# 将数组存储的数据计算得到整数
for i in range(len(digits)-1, -1, -1):
number_origin += digits[i] * (10 ** (len(digits) - i - 1))
# 整数加一即为需要返回的列表相关的数
number_origin += 1
return_list = []
while number_origin > 0:
n = number_origin // 10 # 取整
return_list.append(number_origin % 10)
number_origin = n
return return_list[::-1]
下面的算法可以将123以3 2 1的方式打印出来!注意打印出来是倒序,我们依次将这些数据存进数组以后也是倒序,还需要重新再逆序一次!
## 依次打印一个数的个位、十位、百位......
number = 123
while number > 0:
n = number // 10
print(number % 10)
number = n
## 将一个列表逆序
## 在python中可以很容易将一个列表逆序:reverse_list = a_list[::-1]
# 使用代码将列表逆序
a_list = [1,2,3,4,6,5]
n = len(a_list)
for i in range(n // 2):
a_list[i], a_list[n - i - 1] = a_list[n - i - 1], a_list[i]
print(a_list)
这里的题目可以使用字符串和整数相互转换的方式解决,这样的方式也很容易理解并实践,但是有条件的同学还是建议使用数学计算的方法,一来培养自己的数学和计算机思维,二来也可以熟悉使用的编程语言,好了,今天就到这了,祝大家暴富暴瘦,拜了个拜!
参与评论
手机查看
返回顶部