package leetcode.array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/**
*
* 2020/9/29 22:39
* 报错了,当数较大时溢出了,应该考虑从尾部进行处理。
* 学习内容:
* 1、ArrayList反转,Collections.reverse(arrayList);
* 2、ArrayList转换成String,Integer
* // 创建一个新的 Integer 类型的数组
* // 数组长度和 ArrayList 长度一样
* Integer[] arr = new Integer[list.size()];
* // 将ArrayList对象转换成数组
* list.toArray(arr);
* 此时返回Object[],或者Integer[]
* 3、ArrayList转换成int,
* int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
* // 想要转换成int[]类型,就得先转成IntStream。
* // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream
* // 而IntStream中默认toArray()转成int[]。
*/
public class PlusOne {
public static void main(String[] args) {
int[] nums = {1, 2, 3};
System.out.println(Arrays.toString(plusOne(nums)));
}
public static int[] plusOne(int[] digits) {
int num = digits[0];
for (int i = 1; i < digits.length; i++) {
num = num * 10 + digits[i];
}
num++;
ArrayList<Integer> list = new ArrayList<>();
while (num > 0) {
list.add(num % 10);
num /= 10;
}
Collections.reverse(list);
return list.stream().mapToInt(Integer::valueOf).toArray();
}
}
/**
* 正确做法:从后面向前边处理,简洁有效,学习了
*/
class Solution {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
if (digits[i] != 0) return digits;
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
}