LeetCode笔记2
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
public int[] plusOne(int[] digits) {
int index = digits.length -1;
int count = ++digits[digits.length-1];//10
while (count == 10){
digits[index--]=0;
if(index == -1 && count ==10){
int arr[] = new int[digits.length+1];
arr[0] = 1;
System.arraycopy(digits,0,arr,1,digits.length);
return arr;
}
count = ++digits[index];
}
return digits;
}
思路:
- index => 记录位置 count => 记录当前位置的值。数组无论如何,最后一位肯定是加一的,所以一开始我就令最后一位加一 并赋值给count进行while循环如果count == 10 则进入第二步while内部;否则直接返回数组(最后一位已经+1)
- 因为当前位置已经为10,则我们直接把当前位置赋值为0,然后index-- 也就是指向当前位置前一位,count也相应的+1(index这个位置的元素值);
- if循环里面 => 判断index 是否 为 -1 也就是例如像[9,9,9]这种数组,代码执行到后面肯定是-1 (越界), 这时候我们的解决方法就算 新建一个数组,长度为 输入的数组长度+1 , 并且令第一个元素为1 即可。