嗯,这是一道基础题,本人作为新手就从最简单的题目开始做吧,一直坚持下去,或许哪天就刷满100道了。
首先用c语言来实现:
/** * Note: The returned array must be malloced, assume caller calls free(). */ #include <stdlib.h> //为保险起见,加一个图书馆头文件 int* plusOne(int* digits, int digitsSize, int* returnSize){ for(int i=digitsSize-1;i>=0;i--) { digits[i]++; //题目要求把数组看成一个数然后加一,那就功能模拟法直接加一 digits[i] %= 10; //判断是否有进位的情况 //如果不需要进位,那就直接return就好了;如果需要进位那就循环直到找到不需要进位的那一项 if(digits[i]!=0) { *returnSize = digitsSize; return digits; } } if(digits[0]==0) //如果需要进位且首位也要进位,那就需要一个“新”的数组 { *returnSize = digitsSize + 1; //returnSize代表了新数组的大小 digits = (int *)realloc(digits,sizeof(int)*(digitsSize+1)); /拓展数组 digits[0]=1; // digits[digitsSize] = 0; //不要忘记我们的“新”数组多出来了一位 return digits; } return digits; //最后要加一个return否则编译会不通过 }
因为是新手第一次刷LeetCode,所以很多东西都得自己去探索,性能优化的话,并没有怎么去考虑。所以时间和内存的占用都会比较大,如果有更好的思路请斧正。
LeetCode的题用c语言做常常会出现returnSize这个指针,它应该是用来存放要返回的数组的大小的,如果不给它赋值的话,会直接“编译错误”,可能它在函数外还要进行检验吧,所以要给它赋值;还有最后一个return digits的问题,最后最好放一个返回值,如果不写也是有编译错误。
然后用Python来实现一下:
class Solution(object):
def plusOne(self, digits):
temp = 0
for i in digits:
temp = temp*10+i
temp += 1
b = []
for i in range(len(str(temp))):
b.append(temp%10)
temp /= 10
b.reverse()
return b
用Python的话这题就没有难度了,就是几种数据类型相互转换,如果一开始用c不习惯写的话,就先用Python做吧。