题目

类型:Array
image.png

解题思路

对数组 digits 加一时,只需要关注 digits 的末尾出现了多少个 9 即可。
考虑如下的三种情况:

  • 如果 末尾没有 9,例如 [1,2,3],那么直接将末尾的数加一,得到 [1,2,4] 并返回;
  • 如果 digits 的末尾有若干个 9,例如 [1,2,3,9,9],那么只需要找出从末尾开始的第一个不为 9 的元素,即 3,将该元素加一,得到[1,2,4,9,9]。随后将末尾的 9 全部置零,得到 [1,2,4,0,0] 并返回。
  • 如果 digits 的所有元素都是 9,例如 [9,9,9,9,9],那么答案为 [1,0,0,0,0,0]。只需要构造一个长度比 digits 多 1 的新数组,将首元素置为 1,其余元素置为 0 即可。

代码

  1. class Solution {
  2. public int[] plusOne(int[] digits) {
  3. int n = digits.length;
  4. for (int i = n - 1; i >= 0; --i) {
  5. if (digits[i] != 9) {
  6. ++digits[i];
  7. for (int j = i + 1; j < n; ++j) {
  8. digits[j] = 0;
  9. }
  10. return digits;
  11. }
  12. }
  13. // digits 中所有的元素均为 9
  14. int[] ans = new int[n + 1];
  15. ans[0] = 1;
  16. return ans;
  17. }
  18. }