美文网首页
LeetCode 每日一题 [27] 加一

LeetCode 每日一题 [27] 加一

作者: 是小猪童鞋啦 | 来源:发表于2020-06-14 09:09 被阅读0次
LeetCode 加一 [简单]

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one

题目分析:
解法1:

把数组 数据拿出来,然后拼接+1,然后再放回去,但是会有范围溢出。

解法2

从后向前遍历,如果不是9,就 自增,返回数组,如果是,则置零,继续for循环,循环结束之后还没有返回,那么就都是9,创建一个新的数组,长度+1,然后使得 temp[0] = 1;其他位置的值,默认是 0 ,则直接返回 temp 即可

代码实现
public class LeetCode_27_PlusOne {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int[] res = SortCounterUtil.generateRandomArray(6, 9);
            SortCounterUtil.printArray(res);
            int[] temp = plusOne(res);
            System.out.println();
            SortCounterUtil.printArray(temp);
            System.out.println();
            System.out.println("------------------------------------------");
        }
    }

    public static int[] plusOne(int[] digits) {
        if (digits == null) {
            return null;
        }
        if (digits.length == 0) {
            return new int[]{1};
        }
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] != 9) {
                digits[i]++;
                return digits;
            }
            digits[i] = 0;
        }
        int[] temp = new int[digits.length + 1];
        temp[0] = 1;
        return temp;
    }
}
public class SortCounterUtil {
    /**
     * 生成随机 int 数组
     *
     * @param size  数组长度
     * @param value 数组的值
     * @return 返回生成的随机数组
     */
    public static int[] generateRandomArray(int size, int value) {
        int[] arr = new int[(int) ((size + 1) * Math.random())];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) ((value + 1) * Math.random() - (int) (value * Math.random()));
        }
        return arr;
    }

    /**
     * 数组的拷贝
     *
     * @param arr 需要拷贝的数组
     * @return 返回拷贝完成的数组
     */
    public static int[] copyArray(int[] arr) {
        if (arr == null) {
            return null;
        }
        int[] arrRes = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arrRes[i] = arr[i];
        }
        return arrRes;
    }

    /**
     * 正确的排序方法 来自 JDK 的方法
     *
     * @param arr 需要排序的数组
     */
    public static void rightMethod(int[] arr) {
        Arrays.sort(arr);
    }

    /**
     * 判断两个数组是否相等
     *
     * @param arr1 数组1
     * @param arr2 数组2
     * @return 返回是否相等
     */
    public static boolean isEquals(int[] arr1, int[] arr2) {
        if ((arr1 == null && arr2 != null) ||
                (arr1 != null && arr2 == null)) {
            return false;
        }
        if (arr1 == arr2) {
            return true;
        }
        if (arr1.length != arr2.length) {
            return false;
        }
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }
        return true;
    }

    public static void printArray(int[] arr) {
        if (arr == null) {
            System.out.println("数组为空");
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print("arr[" + i + "] = " + arr[i] + " ");
        }
    }
}

相关文章

网友评论

      本文标题:LeetCode 每日一题 [27] 加一

      本文链接:https://www.haomeiwen.com/subject/ztjrohtx.html