66. 加一
题目:
思路:
【1】思路很简单,从后往前倒推回去,因为是10进制所以只需要考虑进位即可,会出现旧数组不能容纳新数组的情况,如【9】->【1,0】这种,容量扩大了。
代码展示:
//时间0 ms 击败 100% //内存40.2 MB 击败 6.67% class Solution { public int[] plusOne(int[] digits) { // one 为加1值只会出现一次 // carryBit代表进位值 int one = 1 , value = 0, carryBit = 0; for (int i = digits.length - 1; i >= 0; i--){ value = digits[i] + one + carryBit; one = 0; digits[i] = value % 10; carryBit = value / 10; if (carryBit == 0) { return digits; } } // 如果到了最后出现了进位值,则代表原本数组的长度不够容纳 // 如【9】在原本的数组+1后变为【0】,还有一个进位值1,故要重构返回值 int[] res = new int[digits.length+1]; if (carryBit == 1){ res[0] = 1; for (int i = 1;i < res.length; i++){ res[i] = digits[i-1]; } } return res; } } //时间0 ms 击败 100% //内存39.8 MB 击败 90.22% class Solution { public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; --i) { if (digits[i] == 9) { digits[i] = 0; } else { digits[i] += 1; return digits; } } if(digits[0] == 0){ int[] arr = new int[1 + digits.length]; arr[0] = 1; System.arraycopy(digits, 0, arr, 1, digits.length); return arr; } return digits; } }