题目描述:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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、题目理解:
刚开始题目意思都理解错了,后来才发现是将数组的数字当成一个整数再加一,然后其结果又拆成数字放在数组中。
例如:对于[1,2,3],先将数字当成123这个整数,然后再加一,等于124。再将124这个整数拆成数字放在数组中[1,2,4]。对于数字全是9的整数,例如999,加上一之后变成1000,位数增多一位,即第一位变成1,后面剩下的位数都变成0。考虑到原来数组的大小不够,需要重新定义一个数组。
2、代码分析
/*若数字全是9,则位数加1,最前面的数字变为1,后面全是0;只要数字有一个不是0,则数字直接加上1就可以。*/
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
int* ret = (int*)malloc(sizeof(int) * (digitsSize + 1));
for (int i =digitsSize-1; i >=0; i--)
{
if (digits[i] != 9)
{
digits[i]++;
*returnSize = digitsSize;
return digits;
}
else {
digits[i] = 0;
}
}
ret[0]=1;
for (int i = 1; i < digitsSize + 1; i++) {
ret[i] = digits[i - 1];
}
*returnSize = digitsSize+1;
return ret;
}
将整数分为两种情况:
1、不全是9的整数
对于这种情况,数字直接加1就好。(当时我还想将继续其分为末尾数字是9和不是9两种情况。如果是9,则末尾数字置0,末尾数字前一位加1;如果不是9,则只末尾数字加1。不过后面看了大佬的代码后,我还是嫩了点(掩面)。)
2、全是9的整数
如果数字全是9,则重新定义新的数组,大小为digitsSize+1。第一位数字为1,后面数字全是0。
3、提交结果
4、总结:
当个笔记,继续加油!!!