一、题目描述

二、提交代码
class Solution {
public int[] plusOne(int[] digits) {
int digit =0;
for(int i=0;i<digits.length;i++){
digit += ((int)Math.pow(10,digits.length-1-i))*digits[i];
}
String str0 = Integer.toString(digit);
String str = Integer.toString(digit+1);
int size =0;
if(str0.length()<str.length()){
size = digits.length+1;
}else{
size = digits.length;
}
int[] result = new int[size];
for(int j=0;j<str.length();j++){
result[j] = Integer.parseInt(str.substring(j,j+1));
}
return result;
}
}
三、存在问题
测试用例长度过大,超过int表示范围,未通过
四、优解代码
class Solution {
public int[] plusOne(int[] digits) {
for(int i =digits.length-1;i>-1;i--){
digits[i]++;
digits[i] = digits[i]%10;
if(digits[i] !=0){
return digits;
}
}
digits = new int[digits.length+1];
digits[0] = 1;
return digits;
}
}
五、代码思路
- 只有当原数组组成的数字为9,99,999,...时,加一后需要进位,同时结果数组尺寸加一
- 其他情形,只需要末尾元素加一即可
- 因此数组的判断标准即
原数组每一位被进位后对10取余是否为0,如果为0则代表属于9,99,999,...的情形,需要扩大结果数组的尺寸
否则,对于普通情形不需要进位的,只需令最后一位数字加一,对于普通情形需要进位的,需要令最后一次进位的数字加一,其后的数字变0