题目描述
思路
- 先对数组中最后一个元素+1
- 然后,for循环,倒序遍历,判断每个元素是否大于10,若大于则进位
- 考虑一种例外情况,就是99,+1=100,这样就需要在开头插入元素1.因此,最后需要判断第一个元素是否大于10,若大于则进位
Java8.30
class Solution {
public int[] plusOne(int[] digits) {
int len=digits.length;
digits[len-1]++;
for(int i=len-1; i>=0; i--){
if(digits[i]>=10) {
digits[i] = digits[i] - 10;
if(i>0) digits[i-1]++;
else {
digits = new int[len + 1];
int j=len;
while(j>0) {
digits[j]=digits[j-1];
j--;
}
digits[0]=1;
}
}
}
return digits;
}
}
第2个while循环向后移动是不必要的。想一下什么时候会一直都有进位,那必定是都是99…9 + 1 = 1 00…0 所以,可以直接重新建立一个数组让其首位为1即可。参考此题题解
class Solution {
public int[] plusOne(int[] digits) {
int len=digits.length;
for(int i=len-1; i>=0; i--){
digits[i]++;
digits[i] = digits[i] % 10;
if(digits[i]!=0) return digits;
}
digits = new int[len + 1];
digits[0]=1;
return digits;
}
}
C++代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> plusOne(vector<int>& digits) {
int size=digits.size();
digits[size-1]+=1;
for(int i=size-1;i>0;i--){
if(digits[i]>=10){
digits[i]-=10;
digits[i-1]+=1;
}
}
if(digits[0]>=10){
digits[0]-=10;
digits.insert(digits.begin(),1);
}
//for(int i=0;i<size+1;i++) cout<<digits[i]<<" ";
return digits;
}
int main(){
vector<int> digits;
digits.push_back(9);
digits.push_back(9);
digits.push_back(9);
plusOne(digits);
return 0;
}