加一
题目
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。样例
给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定 [9,9,9] 表示 999, 返回 [1,0,0,0].题解
从数组尾部开始执行+1运算并保存进位,在遍历运算中如无进位则可快速跳过。在计算结束后由是否有进位判断原数组长度是否发生变化,决定是否需要建立新数组。
public class Solution {
/**
* @param digits a number represented as an array of digits
* @return the result
*/
public int[] plusOne(int[] digits) {
int carries = 1;
for (int i = digits.length-1;i>=0 && carries > 0; i--)
{
carries = (digits[i] + 1) / 10;
digits[i] = (digits[i] + 1) % 10;
}
if (carries == 0)
{
return digits;
}
int[] result = new int[digits.length + 1];
result[0] = 1;
System.arraycopy(digits,0,result,1,digits.length);
return result;
}
}
Last Update 2016.9.14