leetcode238
思路:左边的乘积创建数组保存,右边的乘积创建数组保存,ans = 左边*右边
常规代码:
int[] p;
int[] q;
public int[] productExceptSelf(int[] nums) {
if(nums.length==0){
return new int[]{};
}
p = new int[nums.length];
q = new int[nums.length];
p[0] = nums[0];
q[nums.length-1] = nums[nums.length-1];
for(int i = 1;i<nums.length;i++){
p[i] = p[i-1]*nums[i];
}
for(int i = nums.length-2;i>=0;i--){
q[i] = q[i+1]*nums[i];
}
int[] output = new int[nums.length];
for(int i = 0;i<output.length;i++){
if(i==0){
output[i] = q[i+1];
}
else if(i== nums.length-1){
output[i] = p[i-1];
}
else {
output[i] = p[i-1]*q[i+1];
}
}
return output;
}
优化代码:
思路:同上,优化了空间
public int[] productExceptSelf(int[] nums) {
if(nums.length==0){
return new int[]{};
}
int[] output = new int[nums.length];
int k = 1;
for(int i = 0;i<output.length;i++){
output[i] = k;
k*=nums[i];
}
k = 1;
for(int i = output.length-1;i>=0;i--){
output[i]*=k;
k*=nums[i];
}
return output;
}