1. 程式人生 > >leetcode 238 Product of Array Except Self

leetcode 238 Product of Array Except Self

這個題沒啥知識點,就是思路問題,還是笨啊。。。

題目大意就是返回一個數組,數組裡的每個元素等於原來陣列除了對應的索引的元素之外的所有元素的乘積

Given an array nums of n integers where n > 1,  return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]

.

Example:

Input:  [1,2,3,4]
Output: [24,12,8,6]

本題不讓用除法,如果用除法就很簡單了,算出總乘積每次除以當前元素就可以了。然鵝不能用乘法。

這樣想,每一個元素A[i]應該等於兩部分的乘積,i-1個的乘積和後n-i個元素的乘積,最後在將這兩部分相乘就可以。

那麼我開兩個陣列pre[n]和next[n],對應上面說的兩部分,用兩個for,算出每一個pre和next。
 

pre[i]=pre[i-1]*nums[i-1];

next[i]=next[i+1]*nums[i+1];

最後再來一個for 計算出每一個pre和next的乘積。

AC的程式碼:

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int s=nums.size();
        int pre[s],next[s];
        pre[0]=1;next[s-1]=1;  
        for(int i=1;i<s;i++){
            pre[i]=pre[i-1]*nums[i-1];
        }
        for(int i=s-2;i>=0;i--){
            next[i]=next[i+1]*nums[i+1];
        }
        for(int i=0;i<s;i++){
            nums[i]=pre[i]*next[i];
        }
        return nums;
    }
};