­

每天一道leetcode66-加1

  • 2019 年 10 月 4 日
  • 筆記

前言

2018.11.17号打卡 明天的题目leetcode16: https://leetcode-cn.com/problems/3sum-closest/description/

题目

每天一道leetcode66-加1 分类:数组 中文链接: https://leetcode-cn.com/problems/plus-one/description/ 英文链接 https://leetcode.com/problems/plus-one/description/

题目详述

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。

题目详解

思路

  • 分两种情况讨论,一种是数组中的数字都是9,比如999,这时候数组长度需要+1;首位置位1,后几位置位0。
  • 另一种是情况是不全是9,那么加1的话,比如说个位是9,那么就把个位变为0,同时下一位加1,就是通过判断每一位是不是9来结束这个判断(从个位到最高位依次+1,直到不是9就结束循环

代码

class Solution {      public int[] plusOne(int[] digits) {          boolean flag = true;          for(int i=0;i<digits.length;i++)          {              if(digits[i] != 9)              {                  flag = false;                  break;              }          }          if(flag)          {              int [] result = new int [digits.length+1];              result[0] = 1;              return result;          }else{              for(int i=digits.length-1;i>=0;i--)              {                  if(digits[i] != 9)                  {                      digits[i] += 1;                      break;                  }else{                      digits[i] = 0;                  }              }          }          return digits;      }  }  

代码讲解

  • 4-11行 判断数字是不是全是9,
  • 12-16行 全是9则直接new一个数组,最高位置位1,其它位置位0
  • 24-26行 就是从个位开始判断是不是9如果是9,那么就把这一位变成0,
  • 20-23行 就是一位不是9,那么加1以后,不会产生进位,循环结束