非負整數以數組形式存儲(最高位在前),對其加 1,返回新數組。
從最低位(數組末尾)向高位遍歷,維護進位 carry:
digit = digits[i] + carrydigits[i] = digit % 10carry = digit / 10carry == 0 提前結束。遍歷結束若 carry > 0,在數組頭部插入 carry。
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int carry = 1;
for (int i = digits.size() - 1; i >= 0 && carry; --i) {
int sum = digits[i] + carry;
digits[i] = sum % 10;
carry = sum / 10;
}
if (carry) digits.insert(digits.begin(), carry);
return digits;
}
};
O(1)(不計輸出)。k 同理,將 k 分解為各位逐位相加。O(n),最壞全 9 需遍歷整個數組。O(1) 額外空間。