给定两个 n*n 的矩阵 A 和 B ,求 A*B 。
数据范围:
,
要求:空间复杂度
, 时间复杂度
进阶:本题也有空间复杂度
,时间复杂度
的解法
PS:更优时间复杂度的算法这里并不考察
public int[][] solve (int[][] a, int[][] b) { // write code here int m=a.length; int[][] res=new int[m][m]; for(int i=0;i<m;i++){ for(int j=0;j<m;j++){ for(int k=0;k<m;k++){ res[i][k]+=a[i][j]*b[j][k]; } } } return res; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型二维数组 第一个矩阵 * @param b int整型二维数组 第二个矩阵 * @return int整型二维数组 */ public int[][] solve(int[][] a, int[][] b) { // write code here // 矩阵乘法等于矩阵行乘矩阵列 // mXn矩阵乘nXp矩阵=mXp矩阵 int[][] res = new int[a.length][b[0].length]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { for (int k = 0; k < b[j].length; k++) { res[i][k] += a[i][j] * b[j][k]; } } } return res; } }
import java.util.*; //六刷 public class Solution { public int[][] solve (int[][] a, int[][] b) { int len=a.length; if (len == 0) return null; int[][] res = new int[len][len]; // boolean flag=true; // for (int row = 0; row < len; row++) { // for (int col = 0; col < len; col++) { // if(a[row][col]!=0){ // flag=false; // break; // } // } // } // if(flag==true)return a; for (int row = 0; row < len; row++) { for (int col = 0; col < len; col++) { res[row][col] = matrixMul(a, b, row, col); } } return res; } // 第一个矩阵 i 行和第二个矩阵 j 列的乘积 public int matrixMul (int[][] a, int[][] b, int row, int col) { int result = 0; int le=a.length; for (int k = 0; k < le; k++) { result += a[row][k] * b[k][col]; } return result; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型二维数组 第一个矩阵 * @param b int整型二维数组 第二个矩阵 * @return int整型二维数组 */ public int[][] solve (int[][] a, int[][] b) { // write code here // [1,2 [1,2 // 3,4] * 3,4] int n = a.length; int[][] ans = new int[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { for(int k = 0; k < n; k++) { ans[i][j] += a[i][k] * b[k][j]; } } } return ans; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型二维数组 第一个矩阵 * @param b int整型二维数组 第二个矩阵 * @return int整型二维数组 */ public int[][] solve (int[][] a, int[][] b) { if (a.length == 0 || b.length == 0) return null; int[][] res = new int[a.length][a[0].length]; for (int row = 0; row < a.length; row++) { for (int col = 0; col < a[0].length; col++) { res[row][col] = matrixMul(a, b, row, col); } } return res; } // 第一个矩阵 i 行和第二个矩阵 j 列的乘积 public int matrixMul (int[][] a, int[][] b, int row, int col) { int result = 0; for (int k = 0; k < a.length; k++) { result += a[row][k] * b[k][col]; } return result; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型二维数组 第一个矩阵 * @param b int整型二维数组 第二个矩阵 * @return int整型二维数组 */ public int[][] solve (int[][] a, int[][] b) { // write code here if(a == null || a.length == 0 || b == null || b.length == 0){return new int[0][0];} int am = a.length; int an = a[0].length; int bm = b.length; int bn = b[0].length; int[][] res = new int[am][bn]; for(int i = 0; i < am; ++i){ for(int j = 0; j < bn; ++j){ int sum = 0; for(int k = 0; k < an; ++k){ sum += a[i][k] * b[k][j]; } res[i][j] = sum; } } return res; } }