的矩阵,的矩阵,那么称的矩阵为矩阵的乘积,其中的第行第列元素可以表示为:
注意点:

  1. 只有矩阵的列数和矩阵的行数相同的时候,两个矩阵才能进行乘法
  2. 矩阵的行数等于矩阵的行数,的列数等于的列数。
  3. 乘积的第行第列的元素等于矩阵的第行的元素与矩阵的第列对应元素乘积之和。

例:

图片说明
首先,每个位置i,j都要计算一次结果,所以先要有两层循环来控制,然后对于每个位置的结果,需要循环p次,
c++

class Solution {
public:
    vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
            int m = a.size();//A的行数
            int p = a[0].size();//A的列数=B的行数
            int n = b[0].size();//B的行数
            vector<vector<int>> ans(m);
            for(int i = 0 ; i < m ; i++)
            {
                for(int j = 0 ; j < n ; j++)
                {
                        int t = 0;
                        for(int k = 0 ; k < p ; k++)
                        {
                                t+=a[i][k]*b[k][j];
                        }
                        ans[i].push_back(t);
                }
            }
            return ans;
    }
};

java

import java.util.*;
public class Solution {
    public int[][] solve (int[][] a, int[][] b) {
        // write code here
            int m = a.length;//A的行数
            int p = a[0].length;//A的列数=B的行数
            int n = b[0].length;//B的行数
            int[][] ans = new int[m][n];
            for(int i = 0 ; i < m ; i++)
            {
                for(int j = 0 ; j < n ; j++)
                {
                        int t = 0;
                        for(int k = 0 ; k < p ; k++)
                        {
                                t+=a[i][k]*b[k][j];
                        }
                        ans[i][j]=t;
                }
            }
            return ans;
    }
}

python

class Solution:
    def solve(self , a , b ):
            m = len(a)
            p = len(a[0])
            n = len(b[0])
            ans=[[[] for i in range(m)] for j in range(n)]
            for i in range(m):
                for j in range(n):
                    t = 0
                    for k in range(p):
                        t=t+a[i][k]*b[k][j]
                    ans[i][j]=t
            return ans;

(python numpy模块有相应的函数,不过本题不允许使用

import numpy as np
class Solution:
    def solve(self, a, b):
        a = np.array(a)
        b = np.array(b)
        r = np.dot(a, b)
        return r.tolist()

以上是矩阵乘法的通解,本题是两个n*n的矩阵,也可以把m、p都用n代替(少些几行代码,不过感觉也没必要)

class Solution {
public:
    vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
            int n = a.size();
            vector<vector<int>> ans(n);
            for(int i = 0 ; i < n ; i++)
            {
                for(int j = 0 ; j < n ; j++)
                {
                        int t = 0;
                        for(int k = 0 ; k < n ; k++)
                        {
                                t+=a[i][k]*b[k][j];
                        }
                        ans[i].push_back(t);
                }
            }
            return ans;
    }
};