一、题目
1、审题
2、分析
给出一个整数数组,代表一个整数,其中第一个元素为最高位。求该数组代表的数字值加一后形成的新数组。
二、解答
1、思路:
从后向前遍历数组,且元素值 +1,
①、若 +1 后数值 < 10,则直接赋该元素值 +1,返回数组。
②、 若 +1 后数值 = 10,代表需要进位,则直接赋该元素值 0,继续遍历且下一个元素值 +1。
令: 当数组第一个元素也需要进位时,则需创建一个比原数组容量大 1 的新数组。
public int[] plusOne(int[] digits) { int len = digits.length; for (int i = len-1; i >= 0; i--) { int sum = digits[i] + 1; if(sum != 10) { digits[i] = sum; return digits; } else // digits[i] + 1 == 10 digits[i] = 0; } int[] arr = new int[len+1]; arr[0] = 1; for(int i = 1; i <= len; i++) arr[i] = digits[i-1]; return arr; }
优化:
public int[] plusOne2(int[] digits) { int n = digits.length; for(int i=n-1; i>=0; i--) { if(digits[i] < 9) { digits[i]++; return digits; } digits[i] = 0; } int[] newNumber = new int [n+1]; newNumber[0] = 1; // 后边的数值必定全为 0 return newNumber; }