leetcode算法66.加一

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

一、leetcode算法



1、 加一


1.1、题目

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


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


你可以假设除了整数 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]


1.2、思路


思路一:本题我们对数据进行加1时要考虑如下几种情况;


情况一:数组最后一位不为9,那么我们就直接加1即可,例如【1,2,3】变为【1,2,4】,只需要修改一个数就可以了。


情况二:数组从后面数有至少一位为9,但并不全为9,这个时候需要从后面找到第一个不为9的数给他加1,然后把后面的9都变为0,例如【1,2,9,9】变为【1,3,0,0】,需要修改的数量取决于9的数量。


情况三:数组全部为9,这个时候需要进1位,需要生成一个新的数组,长度要大于原数组长度1位,并将第一位赋值为1,其余的都为0,例如【9,9,9】变为【1,0,0,0】,需要修改的数量取决于9的数量。


1.3、答案


14.png


class Solution {
    public int[] plusOne(int[] digits) {
        int n = digits.length;
        //将数组逆序遍历
        for(int i = n - 1; i >=0; i--){
            //寻找第一个不为9的位置
            if(digits[i] != 9){
                //将不为9的位置的值加1
                digits[i]++;
                //并将加1后的值都变为0,类似于12999这种数,变化完就是13000
                for(int j = i + 1; j < n; j++){
                    digits[j] = 0;
                }
                return digits;
            }
        }
    //当digits中的所有元素都为9时,则定义一个比原数组多一位的数组,类似于999的数,变化完为1000
        int[] ans = new int[n+1];
        ans[0] = 1;
        return ans;
    }
}
相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
39 0
|
19天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
27 2
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
70 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
52 6
|
4月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
70 2
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
51 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
61 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
80 0
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
43 0