给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [9,9,9] 输出: [1,0,0,0] 解释: 输入数组表示数字 999。
此题一上来容易思维定式,想着把数组先转化为整数,再进行加1操作,再把整数拆分成数组的每个元素,此种做法绕了很大的弯。
正确思路:用for循环遍历数组的每个元素(从末尾开始遍历),判断:若这个元素是9,则将该位置的元素置为0;若这个元素<9,则将其加1,并返回更新元素后的数组。此外,还需考虑若所有位置上的元素都为9(例如999),则经过for循环出来之后的数组的每一位都是0(000),则需重新定义一个原数组长度+1的长度的数组,且其第一位元素置为1.
class Solution {
public int[] plusOne(int[] digits) {
//从数组末尾开始遍历
for(int i=digits.length-1;i>=0;i--)
{
//判断,若该位<9,则加1 返回
if(digits[i]<9)
{
digits[i]=digits[i]+1;
return digits;
}else //否则(=9),将该位置为0
{
digits[i]=0;
}
}
//定义一个比原数组长度多1的数组,第一位置为1
int result[] = new int[digits.length+1];
result[0] = 1;
return result;
}
}