问题来源
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,9]
输出:[4,3,3,0]
解释:输入数组表示数字 4329。
示例 3:
输入:digits = [0]
输出:[1]
解题思路
题目的意思就是说,把一个数组的数拼接起来当成一个整数,然后这个整数加一,在把它以数组的形式输出。
分析会出现的情况:
数组的最后下标中元素的值不为9,也就意味着,最后下标元素的值加一就是结果
当数组后面元素连续都是9就需要一直往数组前一个元素加一,直到加到不为9的元素才停止,并且进位后的下标为0.
最特殊的情况,全部都是9,这就意味着原来数组长度不够,需要一个新数组并且是原来数组长度+1,初始化新数组后,在给新数组的第一个下标值赋1,后面元素都默认为0;
例如:
输入:[9,9,9,9]
输出:[1,0,0,0,0]
9999+1=10000
package com.exam1.arithmetic;
import java.util.Arrays;
/**
* @author: Shen
* @Date: 2022/10/31 18:45
* @param:
* @return:
* 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
*
* 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
*
* 你可以假设除了整数 0 之外,这个整数不会以零开头。
*
* 示例 1:
*
* 输入:digits = [1,2,3]
* 输出:[1,2,4]
* 解释:输入数组表示数字 123。
*
* 示例 2:
*
* 输入:digits = [4,3,2,9]
* 输出:[4,3,3,0]
* 解释:输入数组表示数字 4329。
*
* 示例 3:
*
* 输入:digits = [0]
* 输出:[1]
*/
public class PlusOne {
public static void main(String[] args) {
PlusOne plusOne=new PlusOne();
int[] a={9,9,9};
System.out.println(Arrays.toString(a));
int[] plusone = plusOne.plusone(a);
System.out.println(Arrays.toString(plusone));
}
public int[] plusone(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) { //从数组尾部开始
if (digits[i] != 9) { //当前元素不为9
digits[i] += 1; //元素加一
return digits; //返回数组
} else {
//为9时,数组就需要扩容,把当前下标的元素赋0,下标i减一,在下一个元素中继续上面的循环,表示进位加1
int[] temp = new int[digits.length + 1];
temp[0] = 1;
return temp;
}
}
return null;
}
}