记录LeetCode的第二天| 8月更文挑战

214 阅读2分钟

锵锵锵~ 我来更LeetCode文啦!今日一道简单题

66.加一

题目内容

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

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

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

示例

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

解题思路

刚开始看这道题时,脑子里第一反应就是直接末尾加一就行啦啊,结果啪啪打脸,错了.......

后来琢磨琢磨着才想出第二种情况、第三种情况...这说明什么,这说明好事要多磨,多思多想才行!

所以最后总结出以下内容:

所有数组的形式莫非如下三种情况

所有位置都为9,即999... 最后一位不为9,即...y(y:0-8) 中间某一位不为9,即...y9..(y:0-8) 具体解题思路如下:

遍历数组,从后向前,找到第一个不等于9的位置(用参数k进行记录)

  • 如果遍历完数组,说明所有位置都为9,即999...,那么其值必定为1000...我们将数组长度加一,第一位为1,其他位置均为0 判断最后一位是否为9
  • 如果最后一位不为9,即...y(y:0-8),将最后一位加一即可 否则就是中间某一位置不为9,后面均为9
  • 如果数组中间某一位不为9,即...y9..(y:0-8),那么将后面为9的位置均置0,然后第k位加一即可

解题答案

class Solution {

public int[] plusOne(int[] digits) {

int k = 0;//记录第一个不等于9的位置(从后往前)

//如果全为9

for(int i = digits.length-1 ; i >= 0 ;i --){

  if(digits[i] != 9){

    k = i;//记录下不等于9的位置

    break;

  }

  if(i == 0){

    int[] res = new int[digits.length+1];

    for(int j = 0;j <= digits.length;j++){

      res[j] = 0;

    }

    res[0] += 1;

    return res;

  }

}

//如果最后一位不为9

if(digits[digits.length-1] != 9){

  int[] res = new int[digits.length];

  for(int i = 0;i < digits.length;i++){

    res[i] = digits[i];

  }

  res[digits.length-1] += 1;

  return res;

}

//如果数组中间某一位不为9

else{

  for(int i = k+1;i < digits.length;i++){

    digits[i] = 0;

  }

  int[] res = new int[digits.length];

  for(int j = 0;j<digits.length;j++){

    res[j] = digits[j];

  }

  res[k] += 1;

  return res;

}

}

}

最后

文章有写的不好的地方,还请大佬们不吝赐教!!

LeetCode刷题链接放下面啦!

明天也要继续加油鸭!

66. 加一 - 力扣(LeetCode) (leetcode-cn.com)