这是悦乐书的第156次更新,第158篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第15题(顺位题号是66)。给定一个非空数字数组来表示一个非负整数,并给其加1。该数组已经排序,并且最高位有效数字位于数组的开头,并且数组中的每个元素都表示单个数字。假设该整数不以零开头,除了数字0本身。例如:

输入:[1,2,3]

输出:[1,2,4]

说明:数组表示整数123

输入:[4,3,2,1]

输出:[4,3,2,2]

说明:数组表示整数4321

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 分析并解题

特殊情况:传入的数组为空数组,没有任何元素,直接返回新数组[1]。

正常情况:

第一种情况,当数组最后一个元素不是9的时候,直接将数组的最后一个元素上加1,返回此数组即可。

第二种情况,当数组最后一个元素是9的时候,这事需要考虑是所有元素都为9,还是部分数组元素为9,因为全部元素都是9的时候就涉及到数组扩容了。

对此使用while循环,从后往前,先判断元素本身的值加上1后是否等于10,如果等于10,则将该元素重新赋值为0,索引向前移动一位,继续循环。

如果数组的全部元素都是9,那么索引每次向前循环自减的时候,最后会变成-1,即当索引等于-1时,此数组中所有元素都是9,此时就可以直接数组扩容了,一位整型数组元素的默认值是0,只需要将新数组的第一个元素赋值为1即可,此时的新数据就是最后的结果。

如果数组的部分元素为9,那么while循环会在元素连续为9的前一个索引位置停下,只需要将此索引位置的元素值加1返回原数组即可。

public int[] plusOne(int[] digits) {
if (digits.length == 0) {
return new int[]{1};
}
int lastInt = digits[digits.length-1]+1;
if (lastInt == 10) {
int n = digits.length-1;
while ( n >= 0 && (digits[n]+1) == 10) {
digits[n] = 0;
n--;
}
if (n != -1) {
digits[n] = digits[n] + 1;
return digits;
} else {
int[] newInt = new int[digits.length+1];
newInt[0] = 1;
return newInt;
}
} else {
digits[digits.length-1] = lastInt;
return digits;
}
}

03 小结

上面的解法提交的时候,综合用时0ms,打败了100%的人,是第一次获得这样的结果!容我开心下,哈哈!以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Plus One(Java实现)的更多相关文章

  1. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  3. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  4. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  5. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  6. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  7. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  8. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

  9. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

  10. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

随机推荐

  1. React Fiber源码分析 第二篇(同步模式)

    先附上两张流程图 1.scheduleRootUpdate  这个函数主要执行了两个操作  1个是创建更新createUpdate并放到更新队列enqueueUpdate, 1个是执行sheculeW ...

  2. C#基础知识总结(一)

    这个基础知识系列是我自己对基础知识的一个巩固和总结,在复习的过程中对细节知识点加深印象,可能其中有错误之处,请大家批评指正,谢谢.希望和大家共同学习共同进步. 摘要 这个系列一篇总结了:C#程序的结构 ...

  3. [android] 隐式意图和显式意图的使用场景

    激活系统的某些应用,并且往应用里面填一些数据,比如说短信应用 打开短信应用,查看logcat,找到ActivityManager, 看到Display.com.android.mms/.ui.Comp ...

  4. Java学习笔记之——多态、抽象

    1. 多态 多态:同一种事物调用同一个方法有不同的表现行为.(同一类型操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果) 应用场景;当你定义一个功能性的方法可以使用多态的概念 前提:子类继 ...

  5. python中的eval函数

    eval() 函数十分强大 -- 将字符串 当成 有效的表达式 来求值 并 返回计算结果 In [1]: eval("1 + 3") Out[1]: 4 In [2]: eval( ...

  6. check约束

    -- 删除表 drop table check_test; -- 不为空,不为null的值只能是0,1(不为空,值只能是0,1) create table check_test( default_fl ...

  7. shell 备份 source code

    1. 利用shell脚本备份源码 首先mkdir创建三个目录  backup存放备份代码,script 存放shell脚本,www存放源码 2.创建文件 3. 编写shell脚本 #!bin/sh b ...

  8. crontab命令行和日志查看

    1.基本命令行模式 注意:非root用户 systemctl restart crond 失效,请使用最底层的驱动重启 2.crontab日志 cron日志保存在系统目录/var/log/cron 命 ...

  9. 2018-10-31 在线代码离线翻译Chrome插件"一马"v0.0.8

    续前文: Chrome插件实现GitHub代码离线翻译v0.0.4 添加了对"码云"在线代码的翻译支持, 因此改名暂为"一马". 在此贴中调研了常用的在线代码网 ...

  10. 无需ORM的数据库

    DynamicDB是一种NoSQL数据库.一个实例下可以创建多种Database,一个Database中可以包含多个Collection(相当于关系型数据库中的Table),一个Collection中 ...