思路就是,res数组先在i位保存[i,len-1]的乘积 叫 res1;nums数组在i位保存[0,i]的乘积 叫nums1;最后 res1[i+1]*nums1[i-1] 的乘积就是mums原始数组中除了i之外的所有数的乘积; 注意:索引 0 和 len-1 的位置要特殊处理; 因为 res1[len-2]需要依赖 res1[len-1]的值,所以 res[len-1]的位置上不能像 res[0]那样先赋值。

public int[] timesExceptSelf (int[] nums) { int len = nums.length; int[] res = new int[len]; res[len-1] = nums[len-1];

    for(int i = len-2;i>=0;i--){
        res[i] = res[i+1]*nums[i];
    }
    
    for(int i = 1;i<len;i++){
        nums[i] = nums[i-1]*nums[i];
    }
    
    res[0] = res[1];
    for(int i = 1;i<len;i++){
        if(i == len-1){
            res[i] = nums[len-2];
            continue;
        }
        res[i] = res[i+1]*nums[i-1];
    }
    return res;
}

}