剑指Offer51构建乘积数组
Posted blog-cpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer51构建乘积数组相关的知识,希望对你有一定的参考价值。
题目描述
给定一个数组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 }
以上是关于剑指Offer51构建乘积数组的主要内容,如果未能解决你的问题,请参考以下文章