成功accept的代码:
int* PRoductExceptSelf(int* nums, int numsSize, int* returnSize){
int i,fromfront=1,frombehind=1;int* renums=(int *)malloc(sizeof(int)*(numsSize));
*returnSize=numsSize;
for(i=0;i<numsSize;i++) renums[i]=1; for(i=0;i<numsSize;i++){ renums[i]*=fromfront; fromfront*=nums[i]; renums[numsSize-1-i]*=frombehind; frombehind*=nums[numsSize-1-i]; } return &renums[0];}
我们假设当前nums为[1,2,3,4];要返回的数组为renums[0]....renums[4]。n个数同理,这里举题目给出的例子,去n=4。
renums[0]=(1)*(nums[1]*nums[2]*nums[3]*1), renums[1]=(1*nums[0])*(nums[2]*nums[3]*1),renums[2]=(1*nums[0]*nums[1])*(nums[3]*1),renums[3]=(1*nums[0]*nums[1]*nums[2])*(1)。把每个表达式分为左右两个括号部分相乘的结果,很容易找到规律。从renums[0]到renums[3]:左边相乘的部分依次增加一个nums[i];从renums[3]到renums[0]:右边括号依次多乘以nums[n-1-i]。这就可以用for循环来实现,而且可以在一次for循环中完成对renums数组中的每个元素进行两次操作。在操作前必须先把renums中每个数置为1。
题目中明确要求:Note: The returned array must be malloced, assume caller calls free()。即要求返回的数字必须是要调用malloc给分配内存。如果不使用malloc就会出现runningtime error
新闻热点
疑难解答