《剑指Offer》JZ51构建乘积数组

JZ51:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];

 

解析:

《剑指Offer》JZ51构建乘积数组_第1张图片

根据首先分析出A0 = 1;B[i]对应的A[i]为1

 

代码:

import java.util.Scanner;

public class JZ51 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    //输入
        String str = sc.nextLine().toString();  //读入
        String[] arr = str.split(" ");          //分离
        int[] A = new int[arr.length];          //定义
        for(int i = 0; i < arr.length; i++){
            A[i] = Integer.parseInt(arr[i]);    //字符串转数组
        }
        int length = A.length;
        int[] B = new int[length];
        if(length != 0){
            B[0] = 1;
            //计算下三角连乘
            for(int i = 1; i < length; i++){      //下三角,温故而知新: B[1]~B[n-1]
                B[i] = B[i-1] * A[i-1];
            }
            int temp = 1;
            //计算上三角连乘
            for(int j = length - 2; j >= 0; j--){  //上三角,温故而知新: B[0]~B[n-2]
                temp = temp * A[j+1];         //从B[n-2]开始
                B[j] = B[j] * temp;           //B[n-2] = B[n-2]*A[n-1]
            }
        }
        for (int value : B) {
            System.out.print(value + " ");
        }
    }

}

 

你可能感兴趣的:(剑指offer)