这是我参与更文挑战的第16天,活动详情查看: 更文挑战java
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。git
最高位数字存放在数组的首位, 数组中每一个元素只存储单个数字。数组
你能够假设除了整数 0 以外,这个整数不会以零开头。markdown
java
中基础类型中的int、long等类型的取值范围public int[] plusOne(int[] digits) {
int total = 0;
for (int i = 0; i <digits.length ; i++) {
total = total * 10 + digits[i];
}
total += 1;
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]=total%10;
total = total / 10;
}
if (total != 0) {
digits = new int[digits.length + 1];
digits[0] = 1;
}
return digits;
}
复制代码
2147483647
即2^31。那么就会出现数组转成数组超出范围的状况。那么换成long能够吗?一样的分析long类型64位也没法知足100的长度。因此咱们这里的思路在本题中是没法经过检验的。c=a+b
。第一步咱们开始从末尾也就是4开始进行加1操做!获得的结果是5.由于5!=10。因此没有产生进位,因此在4以前的数据都不会发生变化。因此咱们直接将5赋予数组末尾而后直接返回数组oop
若是是9999,咱们在最后一位进行加1,结果是10这个时候产生进位咱们就须要到第三位进行加1,一样会产生进位那么咱们就须要一直重复下去。最终数组会被更新为0000.post
上面咱们分析了进位只多是1 , 因此在全部位都发生了进位后原数组就会变成0 , 咱们只须要在数组头部添加一个1元素便可测试
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
//对10取余以后若是是0说明发生进位,不然没有进位直接结束
if (digits[i] != 0) return digits;
}
//说明当前数组所有发生进位相似999数字!此时须要扩展数组而且第一位为进位1
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
复制代码
点赞呗!spa