问题
- 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。(理解困难_)
解决
//这里分为全是9和不是全是9,也可以分为最后一位是9,最后一位不是9
class Solution{
public int[] plusOne(int[] digits){
int n=digits.length; // 不是全部为9
for(int i=n-1;i>=0;--i){
if(digits[i]!=9){
++digits[i];
for(int j=i+1;j<n;++j){ //注意这里是++j,因为j会随着i的减小而减小
digits[j]=0;
}
return digits;
}
}
int[] arr2=new int[n+1]; // 全部是9
arr2[0]=1;
return arr2;
}
}
// 以降序的方式储存整数数值
// 题目翻译,数组的每一个元素只能是单个的数字,即一位整数,将数组最后1位加1,如果等于10就返回[1,0]
// 想简单了,题目的意思是,将数组说有数字拼接到一起形成一个新的数字,再加上1,将结果再拆分为单个数字,返回数组
class Solution {
public int[] plusOne(int[] digits) {
int len = digits.length;
for (int i = len - 1; i >= 0; i--) { //一样再判断是否全是9
digits[i] = (digits[i] + 1) % 10;
if (digits[i] != 0) {
return digits;
}
}
digits = new int[len + 1];
digits[0] = 1;
return digits;
}
}
总结
![]()
- 两种解法都是在分为是否全是9和不是全是9来判断的,第二种的化看起来要简单点.