给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在列表的首位,数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
输入: digits = [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
输入: digits = [9]
输出: [1,0]
解释: 输入数组表示数字 9。
def plusOne(digits):
"""
使用模拟进位法对数组表示的数字进行加一操作
:param digits: List[int], 代表数字的数组
:return: List[int], 加一后的数组
"""
n = len(digits)
for i in range(n-1, -1, -1):
if digits[i] < 9:
digits[i] += 1
return digits
digits[i] = 0
return [1] + digits # 处理全部为9的情况
# 示例调用
print(plusOne([1,2,3])) # 输出: [1,2,4]
print(plusOne([4,3,2,1])) # 输出: [4,3,2,2]
print(plusOne([9])) # 输出: [1,0]
def plusOne(digits):
"""
将数组转换为数字进行加一,然后再转换回数组
:param digits: List[int], 代表数字的数组
:return: List[int], 加一后的数组
"""
num = 0
for digit in digits:
num = num * 10 + digit
num += 1
return [int(i) for i in str(num)]
# 示例调用
print(plusOne([1,2,3])) # 输出: [1,2,4]
print(plusOne([4,3,2,1])) # 输出: [4,3,2,2]
print(plusOne([9])) # 输出: [1,0]
def plusOne(digits):
"""
使用字符串处理的方法进行加一操作
:param digits: List[int], 代表数字的数组
:return: List[int], 加一后的数组
"""
s = ''.join(map(str, digits))
num = int(s) + 1
return [int(x) for x in str(num)]
# 示例调用
print(plusOne([1,2,3])) # 输出: [1,2,4]
print(plusOne([4,3,2,1])) # 输出: [4,3,2,2]
print(plusOne([9])) # 输出: [1,0]
def plusOne(digits):
"""
使用递归处理数组加一的操作
:param digits: List[int], 代表数字的数组
:return: List[int], 加一后的数组
"""
def helper(index):
if index < 0:
digits.insert(0, 1)
return
if digits[index] == 9:
digits[index] = 0
helper(index - 1)
else:
digits[index] += 1
helper(len(digits) - 1)
return digits
# 示例调用
print(plusOne([1,2,3])) # 输出: [1,2,4]
print(plusOne([4,3,2,1])) # 输出: [4,3,2,2]
print(plusOne([9])) # 输出: [1,0]
def plusOne(digits):
"""
使用迭代优化的方法处理加一操作
:param digits: List[int], 代表数字的数组
:return: List[int], 加一后的数组
"""
for i in range(len(digits) - 1, -1, -1):
if digits[i] == 9:
digits[i] = 0
else:
digits[i] += 1
return digits
digits.insert(0, 1)
return digits
# 示例调用
print(plusOne([1,2,3])) # 输出: [1,2,4]
print(plusOne([4,3,2,1])) # 输出: [4,3,2,2]
print(plusOne([9])) # 输出: [1,0]
| 特征 | 方法一: 模拟进位 | 方法二: 转数字 | 方法三: 字符串处理 | 方法四: 递归 | 方法五: 迭代优化 |
|---|---|---|---|---|---|
| 时间复杂度 | (O(n)) | (O(n)) | (O(n)) | (O(n)) | (O(n)) |
| 空间复杂度 | (O(1)) | (O(n)) | (O(n)) | (O(n)) | (O(1)) |
| 优势 | 直接明了,逻辑简单 | 数字操作直观 | 代码简洁,易理解 | 自然的递归逻辑 | 极简实现,高效处理 |
| 劣势 | 处理9的进位较多 | 处理大数可能溢出 | 大数转换成本高 | 栈溢出风险 | 特殊情况多一个步骤 |
会计软件:
在处理财务数据时,经常需要对大量的数字序列进行加减操作。这些算法可用于实现一些基本的数字操作功能,如自动递增发票号或处理交易记录。特别是在需要快速响应和高效计算的场景中,选择合适的算法可以显著提高软件性能和用户满意度。