成功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];要返回的數(shù)組為renums[0]....renums[4]。n個數(shù)同理,這里舉題目給出的例子,去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)。把每個表達式分為左右兩個括號部分相乘的結果,很容易找到規(guī)律。從renums[0]到renums[3]:左邊相乘的部分依次增加一個nums[i];從renums[3]到renums[0]:右邊括號依次多乘以nums[n-1-i]。這就可以用for循環(huán)來實現(xiàn),而且可以在一次for循環(huán)中完成對renums數(shù)組中的每個元素進行兩次操作。在操作前必須先把renums中每個數(shù)置為1。
題目中明確要求:Note: The returned array must be malloced, assume caller calls free()。即要求返回的數(shù)字必須是要調用malloc給分配內存。如果不使用malloc就會出現(xiàn)runningtime error
新聞熱點
疑難解答