题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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 <= digits.length <= 100 0 <= digits[i] <= 9
自己想的:分情况讨论
思路
先直接给数组最后以为加一
for循环,从后往前遍历,如果是10,就让当前值为0,前一个值为+1
注意for不要带上第一个数,arr[0],因为会数组越界,而且第一位如果是10,那就得再讨论
如果第一位是10,说明要进位了,那就新建一个数组,长度等于传进来的数组长度+1,首位为1,其余为0就行
代码
public int[] plusOne(int[] digits) { digits[digits.length-1]++;//直接最后一位+1 for (int i=digits.length-1;i>0;i--){//不要带上第一位 if (digits[i]==10){ digits[i]=0; digits[i-1]++; } } if (digits[0]==10){//如果第一位也变成了0,说明要进位了 int brr[]=new int[digits.length+1]; brr[0]=1; return brr; } return digits; }
效果
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.9 MB, 在所有 Java 提交中击败了5.17%的用户
通过测试用例:111 / 111
代码二:网友更加简洁的
public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { if (digits[i] != 9) { digits[i]++; return digits; } digits[i] = 0; } //跳出for循环,说明数字全部是9 int[] temp = new int[digits.length + 1]; temp[0] = 1; return temp; }
效果
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.7 MB, 在所有 Java 提交中击败了5.17%的用户
通过测试用例:111 / 111