一:解题思路
解析:一般情况,只需要将最后一位数字加1,然后返回即可。题目以及告诉我们数组非空,所以我们不用判断边界条件。Time:O(n),Space:O(1)
1.如果最后一位数字是9,我们就要产生进位。即把最后一位数字置为0,将前一位数字加1即可。
2.如果数组上的数字全部是9,那么这个时候就要重新开辟一个数组出来,将会多出一位最高位,并将最高位置1,将其他为全部置0。
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: vector<int> plusOne(vector<int>& digits) { int p = digits.size() - 1; while (p >= 0 && digits[p] == 9) digits[p--] = 0; if (p == -1) { vector<int> result(digits.size()+1,0); result[0] = 1; return result; } else { digits[p] += 1; } return digits; } };
Java:
class Solution { public int[] plusOne(int[] digits) { int p=digits.length-1; while(p>=0 && digits[p]==9) digits[p--]=0; if(p==-1) { int[] result=new int[digits.length+1]; result[0]=1; return result; } else { digits[p]+=1; } return digits; } }
原文:https://www.cnblogs.com/repinkply/p/12631207.html