Leetcode 编程题:加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
解法1:像傻子一样的写条件判断
思路:
@首先从大范围分为9结尾的和非9结尾的:
非9结尾的数组最后一个元素+1返回数组即可
9结尾的:
判断是不是全是9:
是,要开辟新数组,长度比之前多1,新数组第一个元素存1,其余全0,返回arr。
否,说明数组长度不用改变:
从后往前遍历,是9就改为0,continue可要可不要。当不是9时,要给当前值加1并跳出循环
这是进位的原因。
class Solution {
public int[] plusOne(int[] digits) {
if(digits[digits.length-1]==9) {
int flag=1;
for(int x=0;x<digits.length;x++) {
if(digits[x]!=9) {
flag=0;
break;
}
}
if(flag==1) {
int [] arr=new int [digits.length+1];
arr[0]=1;
for(int x=1;x<arr.length;x++) {
arr[x]=0;
}
return arr;
}else {
for(int x=digits.length-1;x>=0;x--) {
if(digits[x]==9) {
digits[x]=0;
//continue;
}else {
digits[x]++;
break;
}
}
return digits;
}
}else {
digits[digits.length-1]++;
return digits;
}
}
}
解法2:目的只想少做点本不需要的判断
相比较于第一种,少了无谓的判断
思路:
@直接从后往前遍历,当为9时置为0,否则+1跳出。
条件判断:当digits[0]==0,也就意味着数组元素是全为9的,那么开辟新数组,长度为之前+1
其第一个元素为1,其余 为0.返回该新数组arr,否则返回更新后的digits
int [] arr=new int [digits.length+1];
for(int x=digits.length-1;x>=0;x--) {
if(digits[x]==9) {
digits[x]=0;
}else {
digits[x]++;
break;
}
}
if(digits[0]==0) {
arr[0]=1;
for(int x=1;x<arr.length;x++) {
arr[x]=0;
}
return arr;
}
return digits;