牛客NC143 矩阵乘法【中等 矩阵 C++/Java/Go/PHP】

题目

题目链接:

https://www.nowcoder.com/practice/bf358c3ac73e491585943bac94e309b0

思路

复制代码
 矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。
 在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。
 运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
 参考下面的链接
 https://blog.csdn.net/Lyon_yong/article/details/129474027
 https://blog.csdn.net/why1472587/article/details/125080048

参考答案C++

cpp 复制代码
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param a int整型vector<vector<>> 第一个矩阵
     * @param b int整型vector<vector<>> 第二个矩阵
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
        /*
        矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。
        在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。
        运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
        参考下面的链接
        https://blog.csdn.net/Lyon_yong/article/details/129474027
        https://blog.csdn.net/why1472587/article/details/125080048
        */

        int arows = a.size(), acols = a[0].size();
        int brows = b.size(), bcols = b[0].size();

        //c=a*b  c的行数=a的行数 c的列数=b的列数
        vector<vector<int>> c(arows);
        for (int row = 0; row < arows; row++) {
            c[row] = vector<int>(bcols);
            for (int col = 0; col < bcols; col++) {
                // 运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
                int cursum = 0;

                for (int idx = 0; idx < acols; idx++) {
                    cursum += a[row][idx] * b[idx][col];
                }

                c[row][col] = cursum;
            }
        }

        return c;
    }
};

参考答案Java

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param a int整型二维数组 第一个矩阵
     * @param b int整型二维数组 第二个矩阵
     * @return int整型二维数组
     */
    public int[][] solve (int[][] a, int[][] b) {
        /*
          矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。
          在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。
          运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
          参考下面的链接
          https://blog.csdn.net/Lyon_yong/article/details/129474027
          https://blog.csdn.net/why1472587/article/details/125080048
           */

        int arows = a.length, acols = a[0].length; //a的行数和列数
        int brows = b.length, bcols = b[0].length; //b的行数和列数

        //c矩阵=a*b    c的行数=a的行数  c的列数=b的列数
        int[][] c = new int[arows][bcols];

        for (int row = 0; row < arows; row++) {
            for (int col = 0; col < bcols ; col++) {
                int cussum = 0;
                for (int idx = 0; idx < acols ; idx++) {
                    cussum += a[row][idx] * b[idx][col];
                }

                c[row][col] = cussum;
            }
        }
        return c;
    }
}

参考答案Go

go 复制代码
package main



/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param a int整型二维数组 第一个矩阵
 * @param b int整型二维数组 第二个矩阵
 * @return int整型二维数组
 */
func solve(a [][]int, b [][]int) [][]int {
	/*
	   矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。
	   在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。
	   运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
	   参考下面的链接
	   https://blog.csdn.net/Lyon_yong/article/details/129474027
	   https://blog.csdn.net/why1472587/article/details/125080048
	*/

	arows := len(a)
	acols := len(a[0])
	//brows := len(b)
	bcols := len(b[0])

	//c=a*b   c的行数=a的行数  c的列数=b的列数
	c := make([][]int, arows)
	for row := 0; row < arows; row++ {
		c[row] = make([]int, bcols)
		for col := 0; col < bcols; col++ {
			//A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
			cursum := 0
			for idx := 0; idx < acols; idx++ {
				cursum += a[row][idx] * b[idx][col]
			}

			c[row][col] = cursum
		}
	}

	return c
}

参考答案PHP

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param a int整型二维数组 第一个矩阵
 * @param b int整型二维数组 第二个矩阵
 * @return int整型二维数组
 */
function solve( $a ,  $b )
{
   /*
      矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。
      在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。
      运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
      参考下面的链接
      https://blog.csdn.net/Lyon_yong/article/details/129474027
      https://blog.csdn.net/why1472587/article/details/125080048
   */
    $arows = count($a);
    $acols = count($a[0]);
    $brows=count($b);
    $bcols =count($b[0]);

    $c = []; //c=a*b  c的行数=a的行数  c的列数=b的列数

    for($row=0;$row<$arows;$row++){
        for($col=0;$col<$bcols;$col++){
            //A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。
            $cursum = 0;
            for($idx=0;$idx<$acols;$idx++){
                $cursum+= $a[$row][$idx]*$b[$idx][$col];
            }
            $c[$row][$col] = $cursum;
        }
    }

    return $c;
}
相关推荐
qyzm7 分钟前
Codeforces Round 1073 (Div. 2)
数据结构·python·算法
深邃-2 小时前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
We་ct5 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程9 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮10 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说10 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove11 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung11 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了11 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL11 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化