Question
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
Idea
利用一个非空的数组的数字来代表一个非负整数,为该整数加1. 假设该整数的前面没有0,最高有效位位于头部。
以十进制的加法规则进行加1则可。
- 从末位开始判断,当前位<9则加1后直接返回数组,否则当前位置0,高位加1;
- 需要注意所有位均为9的情况。
Code
十进制加法规则—Java
public class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for (int i=n-1; i>=0; i--){
if(digits[i] < 9){
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] newdigits = new int[n+1];
newdigits[0] = 1;
return newdigits;
}
}
- 在所有位均为9的情况下,数组的大小不够需要增加一位空间,算法中直接创建一个新的数组;
- 这里利用了整型数组的默认值均为0,故只需将最高位置1,返回新数组即为原数组加1后的数组.
- 时间复杂度:O(n);空间复杂度:O(1)