mirror of
https://github.com/SunnyQjm/algorithm-review.git
synced 2026-06-03 08:16:43 +08:00
70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
# coding=utf-8
|
|
|
|
###############################################################
|
|
# Leetcode 66 加一
|
|
# https://leetcode-cn.com/problems/plus-one/
|
|
#
|
|
# 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
|
|
# 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
|
|
# 你可以假设除了整数 0 之外,这个整数不会以零开头。
|
|
#
|
|
# 示例 1:
|
|
# 输入: [1,2,3]
|
|
# 输出: [1,2,4]
|
|
# 解释: 输入数组表示数字 123。
|
|
#
|
|
# 示例 2:
|
|
# 输入: [4,3,2,1]
|
|
# 输出: [4,3,2,2]
|
|
# 解释: 输入数组表示数字 4321。
|
|
###############################################################
|
|
|
|
|
|
from typing import List
|
|
|
|
class Solution:
|
|
def plusOne(self, digits: List[int]) -> List[int]:
|
|
"""
|
|
|
|
(Knowledge)
|
|
|
|
算法思路:
|
|
1. 从最末尾开始遍历;
|
|
2. 堆当前元素+1,不足10则结束,满10则执行进位
|
|
=> 进位就将当前元素值置为0,然后下标左移,继续判断
|
|
|
|
3. 如果遍历到头元素了还有进位,则需要在头元素之前插入一个元素,值为1
|
|
"""
|
|
|
|
# 特判空数组的情况
|
|
if len(digits) == 0:
|
|
return [1]
|
|
|
|
needAdd = False
|
|
for i in range(len(digits) - 1, -1, -1):
|
|
digits[i] += 1
|
|
if digits[i] == 10:
|
|
digits[i] = 0
|
|
needAdd = True
|
|
else:
|
|
needAdd = False
|
|
break
|
|
|
|
if needAdd:
|
|
digits.insert(0, 1)
|
|
|
|
return digits
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
solution = Solution()
|
|
|
|
print(solution.plusOne([1, 2, 3]), "= [1, 2, 4]")
|
|
print(solution.plusOne([4, 3, 2, 1]), "= [4, 3, 2, 2]")
|
|
print(solution.plusOne([9, 9, 9]), "= [1, 0, 0, 0]")
|
|
print(solution.plusOne([9]), "= [1, 0]")
|
|
print(solution.plusOne([8, 9, 9, 9]), "= [9, 0, 0, 0]")
|
|
|