![](https://i-blog.csdnimg.cn/blog_migrate/5659b973b41386a741407c06fc3a16ec.png)
第一种解题思路:
如果所有元素中没有9,那么数组最后一个元素加1直接返回即可,如果数组中有一个元素是9,那么就直接把这个元素改为0,往前的元素就要加1,重复这个过程,直到向前找的元素不再等于就那么就直接返回。极端情况,如果数组中全部是9,那么就直接数组长度要加1,数组第一位要变为1,返回就可以。优点:易懂。缺点:效率低。
public int[] PlusOne_1(int[] digits)
{
int length = digits.Length;
for (int i = length - 1; i >= 0; i--)
{
//如果当前元素不等于9,那么直接加1后返回即可
if (digits[i] != 9)
{
digits[i]++;
return digits;
}
else
{
//如果等于9,那么就先直接赋值为0
digits[i] = 0;
}
}
//极端情况,如果都是9,那么数组长度增加1,
int[] temp = new int[length + 1];
temp[0] = 1;
return temp;
}
第二种解题思路:
从数组最后一位开始加1开始然后对10取余,如果结果不是0那么就意味着加1到头,直接返回。
如果循环都执行完还没有结果,那么就遇到特殊情况都是9了,直接数组长度加一,数组第一个元素变为1就行。
优点:效率高
public int[] PlusOne_2(int[] digits)
{
for (int i = digits.Length - 1; i >= 0; i--)
{
digits[i] += 1;
digits[i] %= 10;
if (digits[i] != 0)
{
return digits;
}
}
int[] temp = new int[digits.Length + 1];
temp[0] = 1;
return temp;
}