【LeetCode 力扣 66】加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字,

学习目标:

目标:熟练运用 Java所学知识


题目内容:

本文内容: 使用Java实现:加一


题目描述

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

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

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

示例 1:

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

示例 2:

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

示例 3:

输入:digits = [0]
输出:[1]

解题思路

刚看到这个题还是挺懵逼的,大概懂了之后也有个最开始的思路,最开始想的是将数组转化为整型,在加一,在转化为数组,这个思路也不难,但是力扣用例居然有一个{0,0},我的程序算出来就是{1},但正确答案却是{0,1}。

只能换了种思路:

从后向前遍历数组,如果遇到的数字不是9,则加一并且返回数组,如果是9,则当前位赋值为0,继续进行循环到前一位,如果不是9,则加一返回,一直往复,知道遍历全部数组元素,当数组元素全部为9,则新建一个长度比原数组大一个长度的数组,第一位赋值1,其他为0;

实现代码

public class Practice_01 {
    
    
    public static void main(String[] args) {
    
    
        //给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数
        //组中每个元素只存储单个数字。(注意:你要防止的是第一个数字是9或者最后一个是9哈!这种情况会有进位滴)
        int[] a={
    
    1,1,9};
        System.out.println(Arrays.toString(plusOne(a)));
    }
    public static int[] plusOne(int[] digits){
    
    
        for (int i = digits.length - 1; i >= 0; i--) {
    
    
            if (digits[i] != 9) {
    
    
                //如果不是9直接加一返回
                digits[i]++;
                return digits;
            }
            digits[i] = 0;//如果当前位是9,则需要进位,当前位赋值为0,前一位加一
        }
        //跳出for循环,说明数字全部是9
        int[] result = new int[digits.length + 1];
        result[0] = 1;
        return result;
    }
}

运行结果

[1, 2, 0]

猜你喜欢

转载自blog.csdn.net/zhangxxin/article/details/113118880