C/C++解OJ题——加一(题目看不懂系列)


一.原题如下
在这里插入图片描述
二.示例如下
在这里插入图片描述
题目真的很难理解,我反复看了几遍都看不懂,最终去看了别人的解读才明白。
主要是这几个信息:第一点,数组中的元素只会以自然数的形式存在,即最大只能是9。第二点,9只会存在于数组最后,如果有多个将依次从后面进行排列。
所以数组中的数据只会存在三种情况:情况一:不存在自然数9。
在这里插入图片描述
对于上述情况只需要将最后一个元素加1,返回原数组即可。

情况二:部分是自然数9。
在这里插入图片描述
对于这种情况,将所有是9的数组元素变为0,将最后一个不是9数组元素加1,返回原始数组即可。
情况三:全部都是自然数9。
在这里插入图片描述

对于这种情况,开辟新数组,数组大小比原始数组大1,同时将第一个数组元素设置为1,其余设置为0即可。


三.代码实现

//C实现
int* plusOne(int* digits, int digitsSize, int* returnSize){
    //1.不存在自然数9
    for(int i=digitsSize-1;i>=0;i--)
    {
        if(digits[i]!=9)
        {
            digits[i]++;//将最后一个不为9的元素加1即可
            *returnSize=digitsSize;
            return digits;
        }
        //2.部分是自然数9
        digits[i]=0;
    }
    //3.全部都是自然数9
    int*result=(int*)malloc(sizeof(int)*(digitsSize+1));//开辟空间,比原始数组大1
    *returnSize=digitsSize+1;
    result[0]=1;//将第一个元素设置为1
    for(int i=(*returnSize-1);i>0;i--)//将其它元素设置为零
    {
        result[i]=0;
    }
    return result;
}
//C++实现
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        for(int i=digits.size()-1;i>=0;i--)
        {
            //1.不存在自然数9
            if(digits[i]!=9)
            {
                digits[i]++;
                return digits;
            }
            //2.部分是9
            digits[i]=0;
        }
        //3.全部都是9
        std::vector<int>result(digits.size()+1);
        result[0]=1;//将第一个元素置为1,其余默认置为0
        return result;
    }

我是老胡!关注我,一起修bug!❤️ ❤️


版权声明:本文为qq_53524653原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。