返回
挑战算法:算法每日一题 015 加一
Android
2024-01-17 02:20:09
问题
给定一个非负整数,表示为数字数组 digits
,其中每个元素是一个数字。对 digits
执行加一操作,返回更新后的数组。
示例:
输入:digits = [1,2,3]
输出:[1,2,4]
输入:digits = [9]
输出:[1,0]
输入:digits = [9,9,9]
输出:[1,0,0,0]
解题思路
加一操作可以从最低位开始,逐位处理。对于每一位:
- 增加 1: 将当前位的值加 1。
- 进位处理: 如果加 1 后当前位的值大于 9,则当前位的值设为 0,并将 1 进位到下一位。
代码实现:
Python:
def plusOne(digits):
n = len(digits)
# 从最低位开始处理
for i in range(n-1, -1, -1):
# 增加 1
digits[i] += 1
# 进位处理
if digits[i] > 9:
digits[i] = 0
if i > 0:
digits[i-1] += 1
else:
# 最高位进位,需要在数组前面加 1
digits.insert(0, 1)
return digits
C++:
vector<int> plusOne(vector<int>& digits) {
int n = digits.size();
// 从最低位开始处理
for (int i = n - 1; i >= 0; i--) {
// 增加 1
digits[i]++;
// 进位处理
if (digits[i] > 9) {
digits[i] = 0;
if (i > 0) {
digits[i-1]++;
} else {
// 最高位进位,需要在数组前面加 1
digits.insert(digits.begin(), 1);
}
}
}
return digits;
}
Java:
public class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
// 从最低位开始处理
for (int i = n - 1; i >= 0; i--) {
// 增加 1
digits[i]++;
// 进位处理
if (digits[i] > 9) {
digits[i] = 0;
if (i > 0) {
digits[i-1]++;
} else {
// 最高位进位,需要在数组前面加 1
int[] newDigits = new int[n + 1];
newDigits[0] = 1;
for (int j = 1; j < n + 1; j++) {
newDigits[j] = digits[j - 1];
}
digits = newDigits;
}
}
}
return digits;
}
}
总结
加一算法是一种常见的数学操作,可以通过逐位处理、加一和进位处理来解决。在实际应用中,加一算法可以用于处理各种涉及数字操作的问题。