题目
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
分析
类似于大数加减法,这个题目就比大数加减法简单很多,只需要加1,用java里的BigInteger可以计算任意长度的加减乘除幂运算。BigIntger加上字符串处理。
还有就是用数组一位一位判断是否进位,这个涉及到999这种数字需要进一位1000改变了长度,所以数组的大小是不确定的。于是我用了list,之后再将list转为数组。也可以判断数组中的数字是否全部为9,如果是,则新开数组的长度+1,不是的话,则不用+1。(因为只有数字全部是9的情况下,才会产生长度+1的变化。
代码
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] plusOne(int[] digits) {
String string = "";
for(int i : digits) string += i;
BigInteger num = new BigInteger(string);
BigInteger one = new BigInteger("1");
String reslutStr = num.add(one).toString();
int[] reslut = new int[reslutStr.length()];
for (int i = 0; i < reslut.length; i++) {
reslut[i] = reslutStr.charAt(i) - 48;
}
return reslut;
}
}
class Solution {
public int[] plusOne(int[] digits) {
List<Integer> list = new ArrayList<>();
int temp = (digits[digits.length-1] + 1) / 10;
list.add((digits[digits.length-1] + 1) % 10);
for (int i = digits.length-2; i >= 0; i--) {
list.add((digits[i] + temp) % 10);
if ((digits[i] + temp ) / 10 == 1){
temp = 1;
}else{
temp = 0;
}
}
if (temp == 1) list.add(1);
System.out.println(list);
int[] array = new int[list.size()];
for (int i = list.size()-1; i >= 0; i--) {
array[i] = list.get(list.size() - 1 - i);
}
return array;
}
}