一.原题如下
二.示例如下
题目真的很难理解,我反复看了几遍都看不懂,最终去看了别人的解读才明白。
主要是这几个信息:第一点,数组中的元素只会以自然数的形式存在,即最大只能是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版权协议,转载请附上原文出处链接和本声明。