首页 > 学院 > 开发设计 > 正文

leetcode238;以及出现的runningtime error问题

2019-11-06 06:27:23
字体:
来源:转载
供稿:网友

成功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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表