官方解法挺妙的
Python3
直觉解法
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
carry = 0
for i in range(len(digits)-1, -1, -1):
if i == len(digits) - 1:
if digits[i] + 1 >= 10:
digits[i] = (digits[i] + 1) % 10
carry = 1
else:
digits[i] = digits[i] + 1
return digits
else:
if digits[i] + carry >= 10:
digits[i] = (digits[i] + carry) % 10
carry = 1
else:
digits[i] = digits[i] + carry
return digits
if i == 0 and carry == 1:
return [1] + digits
⭐ 官方解法: 从后往前,碰到 9 了才需要处理,否则直接 加 1 返回即可
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
n = len(digits)
for i in range(n-1, -1, -1):
if digits[i] != 9: # 从后往前第一个 不为 9 的 +1, 且 之后的都置0
digits[i] += 1
for j in range(i+1, n):
digits[j] = 0
return digits
return [1] + [0] * n
C++
⭐ 官方解法: 从后往前 找第一个不为 9 的数 + 1, 同时将该数 之后的 位置都置 0
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int n = digits.size();
for (int i = n-1; i > -1; --i){
if (digits[i] != 9){
digits[i] += 1;
for (int j = i+1; j < n; ++j){
digits[j] = 0;
}
return digits;
}
}
vector<int> res(n+1);
res[0] = 1;
return res;
}
};