package practic.SuanFa.数组加1;
import java.util.Arrays;
/*
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
比如,如果数组是[1, 2, 3]则加1之后的结果是[1, 2, 4], 如果数组是[1, 2, 9]加1之后的结果就是[1, 3, 0]
*/
//莽夫解法1
class Solution1 {
public static int[] addOne(int [] arr){
//判断数组元素是不是全是9
boolean flag = true;
for (int i = 0; i < arr.length; i++) {
if(9!=arr[i]){
flag = false;
}
}
//如果数组元数全是9,数组长度加1,头1尾全0
if(flag){
int[] result = new int[arr.length+1];
for (int i = 0; i < result.length; i++) {
if (i == 0) {
result[0] = 1;
}else {
result[i] = 0;
}
}
//返回值为新的长度+1数组
return result;
//如果不全是9,至少有一位小于9
}else{
for (int i = arr.length-1; i >= 0; i--) {
//从数组末尾每一位元素加1,如果和为10,将元素值变0
if((1+arr[i])==10){
arr[i]= 0;
//如果和不为10,元素加1,退出循环
}else{
arr[i] += 1;
break;
}
}
//返回值为原数组
return arr;
}
}
}
//解法二 脑筋思维2
class solution{
public static int[] addOne(int[] arr){
//直接反向循环数组
for (int i = arr.length-1; i >=0 ; i--) {
//如果元素为不为9直接结束输出
if(arr[i] != 9){
arr[i] += 1;
return arr;
}
//如果是9直接进位让元素为0
arr[i] = 0;
}
//所有元素为9
int[] newArr = new int[arr.length+1];
//第一个元素为0
newArr[0] = 1;
//结束
return newArr;
}
}
09-16
472
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)