leetcode (算法)66.加一(python版)
需求
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
代码
class Solution:
# todo 方法一
# 将原本列表中数字转化为字符串保存下来,再将字符串转化为整数,进行+1操作
# 之后将操作后的数字转化为字符串进行便利,将便利结果追加到新的列表中
def add_one(self,list_int):
result=''
result_list=[]
for i in list_int:
result+=str(i)
# print(int(result))
result=str(int(result)+1)
# print(result)
for i in result:
result_list.append(int(i))
return result_list
# todo 方法二
# 初始化一个进位变量 carry 为 1。
# 从数组的最后一位开始,依次将当前位上的数字加上进位变量 carry。
# 如果当前位的结果大于等于 10,则将进位变量 carry 设为 1,并将当前位的结果减去 10。
# 如果当前位的结果小于 10,则将进位变量 carry 设为 0,并停止遍历。
# 继续处理前一位,重复步骤 2-4,直到处理完所有位或进位变量 carry 变为 0。
# 如果处理完所有位后,进位变量 carry 仍为 1,说明原数组的最高位有进位,需要在数组的头部插入一个 1。
def plusOne(self,digits):
carry = 1
for i in range(len(digits) - 1, -1, -1):
digits[i] += carry
if digits[i] >= 10:
digits[i] -= 10
carry = 1
else:
carry = 0
break
if carry == 1:
digits.insert(0, 1)
return digits
if __name__ == '__main__':
call=Solution()
list_int=[1,2,3,4]
digits=[1,2,3,9]
print(call.add_one(list_int))
print(call.plusOne(digits))