Leetcode 05 ——加一(Java)

简介: Leetcode 05 ——加一(Java)

前言


Algorithms + Data Structures = Programs.


                                                     ————Pascal之父 Nicklaus Wirth


算法 + 数据结构 = 程序


坚持刷算法题,变得更强!


题目及解析

图片.png


解析

看看题目是不是脑子一热觉得这题so easy。不就是加1嘛,我只要把数组最后一个数加一然后返回整个数组不就行了。


此言差矣,那你个位数如果是9嘞?那你是不是十位数还要加1?那如果你十位数还是9,百位数是不是又要加1?层层套娃给你弄晕了。


其实我们要解决此题很简单。


思路:我们分为两种情况,一种是普通数,这种数既可以没有进1,也可以进1。举个栗子:普通数可以是123然后加1,变成123;也可以是169,加一变成167,只要加一后长度不变,你原来是三位数加一还是三位数就行。我们认为是普通数。


另一种特殊情况就可以直接举例子:比如999,加一之后是不是变成1000,原来是三位数,加一之后变成了四位数,这时候我们是不是就要让他的数组长度加1了。注意数组长度加1哦。


然后在普通数里面我们再分两种情况:

①尾数或除头数以外有9的情况,咱们可以直接此位赋值为0,然后让 一个变量 i 继续循环,前一位如果不为9,加1即可。

②没有9就直接加1


解题代码

classSolution {
publicint[] plusOne(int[] digits) {
intn=digits.length;
for(inti=n-1;i>=0;i--){
if(digits[i]==9){
digits[i] =0;
            } else{
digits[i] +=1;
returndigits;
            }
        }
digits=newint[n+1];
digits[0] =1;
returndigits;
    }
}
目录
相关文章
|
2月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
57 6
|
4月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
76 2
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
54 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
66 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
83 0
|
4月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
56 0
|
4月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
45 0
|
1天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
1天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。