给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
开始有两个想法,一个是转成字符串,然后按位去做,另一个是从后往前遍历数组,依次计算每个数位,后来突然意识到这道题仅仅是在原来的数组表示的数的基础上加一,不用如此大费周章。
1)当数组最后一个元素不为9,表示无需进位,只需在原数组上把最后一个元素+1,返回这个数组即可。
2)当最后一个元素为9,表示需要进位,通过一个boolean变量表示是否需要进位,当需要进位时就将前一位元素+1,通过一个循环处理这样的数字,直到不需要进位了,此时前面的数字无需修改,直接返回当前数组即可。
3)当循环结束了,有两种情况:第一种是最高位不为0,表示数字位数不变,此时直接返回当前数组;第二种是最高位为0,表示数字位数变了,因此创建一个新数组,长度为原数组+1,将首位设置成1,返回即可。
class Solution {
public int[] plusOne(int[] digits) {
int n=digits.length-1;
if(digits[n]!=9){
digits[n]=digits[n]+1;
return digits;
}
boolean carry=true;
while(carry&&n>=0){
int sum=digits[n]+1;
if(sum<10)carry=false;
digits[n]=sum%10;
n--;
}
if(digits[0]!=0)return digits;
int[] newD=new int[digits.length+1];
newD[0]=1;
return newD;
}
}
运行时间 | 0ms | 100% |
---|---|---|
消耗内存 | 37.5M | 5.63% |
这道题也不难,思路都会有,只不过是可能会多做许多无用的事情,要多思考。学了三天车做了三天的简单题,明天考完科目三就可以刷一些难题了。