1. 不可用除法吼肥,最容易的方法全部乘積除不可用了。
2. 后路想到麻车,使用兩個數(shù)組缀皱,分別乘積,左邊數(shù)組的前半截和右邊數(shù)組的后半截乘積即可动猬。o(n);
3. 壓縮空間啤斗,那么直接使用output來承接left,使用原數(shù)組承接right赁咙,即可(畫圖钮莲,即可發(fā)現(xiàn))免钻。
第一種方法代碼:
class?Solution?{
????public?int[]?productExceptSelf(int[]?nums)?{
????????int?length?=?nums.length;
????????int?leftList[]?=?new?int[length];
????????int?rightList[]?=?new?int[length];
????????int?output[]?=?new?int[length];
????????leftList[0]?=?nums[0];
????????rightList[length-1]?=?nums[length-1];
????????for(int?i?=?1;?i?<?length;?i++){
????????????leftList[i]?=?leftList[i-1]*nums[i];
????????}
????????for(int?i?=?length-2;?i?>=?0;?i--){
????????????rightList[i]?=?rightList[i+1]*nums[i];
????????}
????????for(int?i?=?0;?i?<?length;?i++){
????????????int?left?=?i-1>=0???leftList[i-1]:1;
????????????int?right?=?i+1<length?rightList[i+1]:1;
????????????output[i]?=?left*right;
????????}
????????return?output;
????}
}
第二種方法代碼:
class?Solution?{
????public?int[]?productExceptSelf(int[]?nums)?{
????????int?length?=?nums.length;
????????int?output[]?=?new?int[length];
????????output[0]?=?nums[0];
????????for(int?i?=?1;?i?<?length;?i++){
????????????output[i]?=?output[i-1]*nums[i];
????????}
????????for(int?i?=?length-2;?i?>=?0;?i--){
????????????nums[i]?=?nums[i+1]*nums[i];
????????}
????????int?left;
????????int?right;
????????for(int?i?=?0;?i?<?length;?i++){
????????????left?=?i-1>=0???output[i-1]:1;
????????????right?=?i+1<length?nums[i+1]:1;
????????????nums[i]?=?left*right;
????????}
????????return?nums;
????}
}