LC-加一和ArrayList转成数组

这篇博客探讨了在Java中对整型数组执行加一操作时遇到的溢出问题,并提供了两种解决方案。一种是通过将数组转换为ArrayList,反转并逐位处理,另一种是从数组尾部开始直接进行加一操作,避免了溢出。同时,文章介绍了ArrayList与Integer数组以及int数组之间的转换方法,并附带了参考链接。
摘要由CSDN通过智能技术生成
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;
    }
}

参考链接:
Java中List, Integer[], int[]的相互转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值