一、问题
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
二、解题思路
分析:这道简单问题,容易想到的两种思路是:
1. 将数组中的单个数组合并成为数组表示的数字,再加一,然后将数字重新转换为数组的形式存储,这里可以有两种实现方式,(1) 一种是用将数组中的元素先拼接成字符串,然后转换为整数加一,在转换为字符串,用数组存储,并进行类型转换,也就是本文的第二种实现方式;(2) 另一种实现方式是,直接将数组中的数字,计算成为一个数组表示的数字,然后加一,然后通过整除和取余操作结合的方式,重新用数组的方式存储。这种方式和第一种实现方式较类似,不做练习了;
2.第二种思路,即直接在原数组上进行操作,这里主要考虑数字是9和进一的操作。具体实现较简单,直接参考下列代码:
三、python具体实现
基于原数组的直接实现:
class Solution(object):
def plusOne2(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
if digits[-1]<9:
digits[-1] += 1
return digits
index = len(digits)-1
flag = True
while digits[index]+1>9 :
digits[index] = 0
if index ==0:
digits.insert(0,1)
flag = False
break
index -=1
if flag:
digits[index] += 1
return digits
转换成字符串实现:
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
digits = [str(i) for i in digits]
numStr = str(int("".join(digits))+1)
digits = [int(i) for i in numStr]
return digits
四、题外记
简单问题不简单,人的思维和计算机的思维!!!
版权声明:本文为weixin_42521211原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。