【剑指Offer】51、构建乘积数组

题目描述

给定一个数组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]和B[n-1] = 1)

题解:矩阵法
 1 /*
 2 B[i]的值可以看作上图的矩阵中每行的乘积。
 3 下三角用连乘可以很容求得,上三角,从下向上也是连乘。
 4 */
 5 public static int[] multiply(int[] A) {
 6         if(A==null)
 7             return null;
 8         int len=A.length;
 9         int[] bNums = new int[len];
10         bNums[0]=1;
11        //计算下三角连乘
12         for(int i=1;i<len;i++){
13             bNums[i]=A[i-1]*bNums[i-1];
14         }
15         int temp = 1;
16         //计算上三角
17         for(int j = len-2; j >= 0; j--){
18             temp =temp*A[j+1];
19             bNums[j] *= temp;
20         }
21         return bNums;
22     }
23 测试:
24      System.out.println("请输入几个数并用逗号隔开:");
25         Scanner sc = new Scanner(System.in);
26         String str = sc.nextLine().toString();
27         String[] arr = str.split(",");
28         int[] b = new int[arr.length];
29         for (int j = 0; j < b.length; j++) {
30             b[j] = Integer.parseInt(arr[j]);
31         }
32         int[] multiplys = multiply(b);
33         for (int multiply : multiplys) {
34             System.out.print(multiply+"");
35         }

猜你喜欢

转载自www.cnblogs.com/Blog-cpc/p/12323099.html
今日推荐