不包含本位置的累乘数组

//不包含本位置的累乘数组
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));
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值