题目
https://www.lintcode.com/problem/1415
输入为整数数组 arr,请你返回结果数组 ans,使得 ans[i] 为 arr 中除了 arr[i] 以外的所有数的乘积。
1 <= arr.length <= 10
-10 <= arr[i] <= 10
样例
样例1
输入: arr = [2,3,4,1]
输出: [12,8,6,24]
解释:
3 * 4 * 1 = 12, 1 * 4 * 1 = 8, 2 * 3 * 1= 6, 2 * 3 * 4 = 24
样例2
输入: arr = [1,2]
输出: [2,1]
解释:
2 = 2, 1 = 1。
答案
public class Solution {
/**
* @param arr: The array you should handle
* @return: Return the product
*/
public int[] getProduct(int[] arr) {
int n = arr.length;
int[] ans = new int[n];
ans[0] =1;
for (int i = 1; i <n ; i++) { //左侧元素的乘积
ans[i] = arr[i-1]*ans[i-1];
}
int r=1;
for (int i = n-1; i >=0 ; i--) { //右侧元素的乘积
ans[i] = ans[i]*r;
r*=arr[i];
}
if(n ==1) ans[0] =0;
return ans;
}
}