LeetCode66——加一

LeetCode66——加一

题目描述:

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

示例:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123

输入:digits = [1,9]
输出:[2,0]
解释:输入数组表示数字 19

输入:digits = [8 ,9,9, 9]
输出:[9 ,0,0 ,0]
解释:输入数组表示数字 8999

输入:digits = [9 ,9,9, 9]
输出:[1,0 ,0,0 ,0]
解释:输入数组表示数字 9999

思路:

1.末尾没有9——直接末尾元素加一即可加一

2.末尾有9——逆序找第一个不为9的元素并且将其加一 ,后面都变成0

3.全是9——新建个长度为原来数组长度+1的新数组{1,0,0,0,0…}即可

4.模拟实现数字进位

Result01

LeetCode66——加一_第1张图片

   public static int[] addOne(int[] arr){
        //初始i指向数组最后一个元素  逆序找第一个不为9的数字
        for (int i = arr.length - 1; i >= 0; i--) {
            if (arr[i] != 9) {//找到了不为9的元素 加一即可
                arr[i]++;
                //加一之后    后面全部置为0
                for (int j = i + 1; j < arr.length; j++) {
                    arr[j] = 0;
                }
                return arr;
            }
        }
        //执行到这的时候说明未执行if (arr[i] != 9) return arr,证明数组中的元素全都是9
        // arr 中所有的元素均为 9 加一之后 新创建一个数组返回即可
        int[] ans = new int[arr.length + 1];
        ans[0] = 1;
        return ans;
    }

运行结果;
LeetCode66——加一_第2张图片

Result02

LeetCode66——加一_第3张图片

public static int[] addOne(int[] arr) {
        //模拟现实数字进位的机制
        for (int i = arr.length - 1; i >= 0; i--) {
            arr[i]++;
            //这一步对 10 取模 因为数组中每个元素只存储单个数字 所以只有9+1 模 10 ==0 其余的数字加一之后模10 都还是其本身
            arr[i] = arr[i] % 10;
            //如果进位之后模10不等于0 证明其是小于9的数 直接返回数组
            if (arr[i] != 0){
                return arr;
            }
        }
        //运行到这里的时候 说明进位后全为0 ,即原来数组的元素全是9 ,所以要新建数组
        arr = new int[arr.length + 1];
        arr[0] = 1;
        return arr;
    }

LeetCode66——加一_第4张图片

你可能感兴趣的:(LeetCode,1024程序员节,学习,笔记,leetcode,java,算法,数据结构)