码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-02-17 19:42:51      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:图片   逗号   length   temp   lin   image   line   bnu   一个   

题目描述

给定一个数组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         }

 

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

标签:图片   逗号   length   temp   lin   image   line   bnu   一个   

原文地址:https://www.cnblogs.com/Blog-cpc/p/12323099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!