【leetcode】每日精选题详解之给我的尾巴加个1

  嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解,并且每周会整理一下该周刷的所有题目,及解题框架。大家搜索【程序员爱做饭】关注我吧!


66.加一

  • 题目描述
  • 遍历解法
    • 做题思路
    • 题目代码
  • 总结


题目描述


【leetcode】每日精选题详解之给我的尾巴加个1_第1张图片


遍历解法

做题思路

遇到这个题目可能会首先想到将数组里的元素提取出来,变成一个整数,然后加1再存到数组里。但是这个会很繁琐,而且还需要考虑溢出的问题,所以我们不提倡这样写。收获和付出不成正比。那么我们看另一种做法,因为数组不可能为空,所以无非会有两种情况,
(1)数组长度不变
(2)数组长度加1.
例:[9,8]+1=[9,9];数组长度不变 [9,9]+1=[1,0,0]数组长度加一 两种情况.那么我们怎么区分这两种情况呢?我们首先对数组尾部的元素加1,然后判断其对10取余是否为0,即最后一位是否为9,然后如果为9,则指针向前移动一步,将前一位也加1,不断迭代,直到某一位加一后不为10输出,或者直到遍历完整个数组。

题目代码

class Solution {
     
    public int[] plusOne(int[] digits) {
     
      //从后往前遍历数组
       for(int i = digits.length-1;i>=0;i--){
     
            digits[i]++;//将最后一位加1,
            digits[i]=digits[i]%10;//对该位取余,当加1后为10会变成0,其余情况不会有变化
            //如果不为0,说明数组长度不会变化,直接输出
            if(digits[i]!=0){
     
                return digits;
            }           
       }
       //遍历完整个数组,说明为数组长度发生变化的情况,则在数组头部添加一个1即可。后面元素都为0;
       //[9,9]+1=[0,0],length+1 [1,0,0]
       digits = new int[digits.length+1];
       digits[0]=1;
       return digits;
    }
}

总结

同学们我最近有了一个长久的计划,就是把leetcode题目整理出来,由浅入深,由简到繁都整理出来是一个宏大的工程,所以我打算每天整理一到两个经典题目。并且每周会整理一下该周刷的所有题目,及解题框架。大家可以搜索【程序员爱做饭】关注我,大家也可以扫描二维码加我好友,我拉你进刷题群,大家一块刷题呀!

【leetcode】每日精选题详解之给我的尾巴加个1_第2张图片
【leetcode】每日精选题详解之给我的尾巴加个1_第3张图片

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode每日精选,leetcode,算法,哈希表)