解题思路
本来考虑了这个数是不是负数,但是看题目是把数组分割成一个个字符, 所以排除是负数的情况
但是如果是负数,可以先转成正数然后-1来做,改一改这题就成了-1?
1、需要注意防止最类似999情况,创建一个数组n+1的结果数组
2、数组虽然存的是0-9的数字,但是不代表int[] 不能存>=10的数,所以最后一个元素直接+1
3、从最后一个元素开始判断是否>=10, 两个个位数+1上一位最多只会加1
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
int[] nums = new int[n+1]; //最高位判断是否进位
//从最后一个元素+1开始一直向前遍历, 要考虑+1后最高位进1
digits[n-1]+=1;
for (int i = n-1; i >=0; i--) {
if(digits[i]>=10) { //进位, 当为最高位的时候需要特别判断
if(i==0) {
nums[i+1]=digits[i]-10;
nums[0] = 1;
}else {
nums[i+1]=digits[i]-10;
digits[i-1]+=1;
}
}else {
nums[i+1]=digits[i];
}
}
//判断高是否存在进位, 没有进位把最高位的0舍去
if(nums[0]==0) {
nums = Arrays.copyOfRange(nums, 1, n+1); //左闭右开
}
return nums;
}
}
leetcode 账号黑峯,博客做记录用,代码有问题欢迎指正