2022年6月20日leetcode每日一题打卡——66.加一

一、题目描述与要求

66.加一

题目描述

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

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

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

示例

示例1:

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

示例2:

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

 示例3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

二、解题思路

总的思路:

简单粗暴一点就是在数组的最后一位+1.也就是直接digits[digitsSize-1]+1.但此时需要考虑的是如果数组的最后一位的元素的值为9,那就需要进1,此时数组的长度可能会不够,所以需要另外考虑,只要值为9的元素个数之和不超过digitsSize,此时returnSize=digitsSize,那就不需要另外申请空间存储,只需要让值等于9的元素等于0,接着i--,然后digits[i]+1.如果值为9的元素个数等于数组元素个数,也就是数组里面的元素全部都是9,此时returnSize=digitsSize+1,那就需要另外申请一个新的存储空间,长度为digitsSize+1,接着第一位赋值为1,其他全为0,最后返回新建设的数组p,否则返回digits数组。

具体步骤:

1、定义num用于记录数组中数值等于9的元素个数
2、利用for循环对数组的最后一位进行判断,如果不为9则直接加1后结束循环,如果相等则赋为0,num++
3、num<digitsSize时returnSize==digitsSize,num==digitsSize时returnSize==digitsSize+1;
4、如果num==digitsSIze,则重新申请长度为digitsSize+1的整型数组,并且将第一位赋值为1,其余都赋值为0,然后返回数组p,否则返回数组digits

三、具体代码

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize){
   int num=0;//用于记录数组中9的个数
   for(int i=digitsSize-1;i>=0;i--)//遍历如果出现9则将其赋为0
   {
       if(digits[i]==9)
       {
           digits[i]=0;
           num++;
       }
       else//否则直接加1
       {
           digits[i]++;
           break;
       }
   }
   *returnSize=digitsSize;
   if(num==digitsSize)//如果输入的每一位都是
   {
       int *p;
       p=(int *)malloc(sizeof(int)*(digitsSize+1));
       p[0]=1;
       for(int i=1;i<=digitsSize;i++)
       {
           p[i]=0;
       }
       *returnSize=digitsSize+1;
       return p;
   }
   else
    return digits;
}

猜你喜欢

转载自blog.csdn.net/m0_59800431/article/details/125365660