给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
我的错误解法:
不能转为数字然后操作,算法正确但是会越界然后得不到正确结果
public static int[] plusOne(int[] digits) { int num = 0; for (int i=0;i<digits.length;i++) { num = num*10 + digits[i]; } num = num + 1; //新数长度 int length = 0; int k = num; while(k !=0) { k /= 10; length++; } int[] res = new int[length]; for (int i=length-1;i>=0;i--) { res[i] = num%10; num = num/10; } return res; }
参考解法:
链接:https://www.nowcoder.com/questionTerminal/4d135ddb2e8649ddb59ee7ac079aa882 来源:牛客网 //1.不需要flag! 从右向左,遇到9就变0,非9就加1,然后break; //2.digits[0]如果等于0,说明长度增加了1,则新建数组,首位为1,其他位为0; public int[] plusOne(int[] digits) { for (int i = digits.length-1; i >= 0 ; i--) { if (digits[i] == 9)digits[i] = 0; else { digits[i] = digits[i]+1; break; } } if (digits[0] == 0){ int[] arr = new int[digits.length+1]; arr[0] = 1; for (int i = 1; i < arr.length; i++) arr[i] = 0; return arr; } return digits; }