一、leetcode算法
1、 加一
1.1、题目
定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
1.2、思路
思路一:本题我们对数据进行加1时要考虑如下几种情况;
情况一:数组最后一位不为9,那么我们就直接加1即可,例如【1,2,3】变为【1,2,4】,只需要修改一个数就可以了。
情况二:数组从后面数有至少一位为9,但并不全为9,这个时候需要从后面找到第一个不为9的数给他加1,然后把后面的9都变为0,例如【1,2,9,9】变为【1,3,0,0】,需要修改的数量取决于9的数量。
情况三:数组全部为9,这个时候需要进1位,需要生成一个新的数组,长度要大于原数组长度1位,并将第一位赋值为1,其余的都为0,例如【9,9,9】变为【1,0,0,0】,需要修改的数量取决于9的数量。
1.3、答案
class Solution { public int[] plusOne(int[] digits) { int n = digits.length; //将数组逆序遍历 for(int i = n - 1; i >=0; i--){ //寻找第一个不为9的位置 if(digits[i] != 9){ //将不为9的位置的值加1 digits[i]++; //并将加1后的值都变为0,类似于12999这种数,变化完就是13000 for(int j = i + 1; j < n; j++){ digits[j] = 0; } return digits; } } //当digits中的所有元素都为9时,则定义一个比原数组多一位的数组,类似于999的数,变化完为1000 int[] ans = new int[n+1]; ans[0] = 1; return ans; } }