//不包含本位置的累乘数组
public class MutilArr{
//(方法一、通过除法)获得累乘数组
public static int[]GetMutilArr(int[]arr)
{
if(arr==null||arr.length<2)
{
return null;
}
int[]reArr=new int[arr.length];
int sum=1;
int k=-1;
int count=0;
for(int i=0;i<arr.length;i++)
{
if(arr[i]!=0)
{
sum*=arr[i];
}else{
k=i;
++count;
}
}
//一个0,获取0的位置
if(k!=-1)
reArr[k]=sum;
for(int i=0;i<arr.length;i++)
{
//至少2个0
if(count>1)
{
reArr[i]=0;
}
//只有1个0,非0位置结果全为0
if(k!=-1&&i!=k)
{
reArr[i]=0;
}
//全部不为0
else
{
if(i!=k)
reArr[i]=sum/arr[i];
}
}
return reArr;
}
//通过左右累乘获得结果
public static int[]GetMutilArr02(int []arr)
{
if(arr==null||arr.length<2)
{
return null;
}
int[]res=new int[arr.length];
res[0]=arr[0];
//从左到右扫描获得累乘积
for(int i=1;i<arr.length;i++)
{
res[i]=res[i-1]*arr[i];
}
int temp=1;
//从右向左扫描获得累乘积
for(int i=arr.length-1;i!=0;i--)
{
res[i]=res[i-1]*temp; //一个数等于左边的乘积*右边的乘积
temp*=arr[i];
}
res[0]=temp; //第一个数的重新赋值
return res;
}
//打印数组
public static void PrintArr(int[]arr)
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void main(String[]args)
{
int[]arr={2,3,1,4};
PrintArr(GetMutilArr(arr));
PrintArr(GetMutilArr02(arr));
}
}
不包含本位置的累乘数组
最新推荐文章于 2023-12-07 10:57:17 发布