20-数组-重塑矩阵

这是数组的第20篇算法,力扣链接

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 rc ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

示例 1:

复制代码
输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]

示例 2:

复制代码
输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]

这道题的第一个思路是进行遍历赋值,遍历原数组的同时为新数组赋值,值得注意的是,这里的弹出条件是数组矩阵的面积不等。

Go 复制代码
func matrixReshape(mat [][]int, r int, c int) [][]int {
	height, weight := len(mat), len(mat[0])
	if r == height && c == weight || height*weight != r*c {
		return mat
	}
	result := make([][]int, r)
	cr, cc := 0, 0
	for _, row := range mat {
		for _, col := range row {
			if cc >= c {
				cr++
				cc %= c
			}
			if result[cr] == nil {
				result[cr] = make([]int, c)
			}
			result[cr][cc] = col
			cc++
		}
	}
	return result
}

这个做法过于模拟,当然还有一些算法上的优化:

Go 复制代码
func matrixReshape(nums [][]int, r int, c int) [][]int {
	height, weight := len(nums), len(nums[0])
	if height*weight != r*c {
		return nums
	}
	result := make([][]int, r)
	for i := range result {
		result[i] = make([]int, c)
	}
	for i := 0; i < height*weight; i++ {
		result[i/c][i%c] = nums[i/weight][i%weight]
	}
	return result
}
相关推荐
埃菲尔铁塔_CV算法3 分钟前
基于扩张卷积与双分支参数调控的低光照图像增强算法完整研究与工程解析
人工智能·神经网络·算法·机器学习·计算机视觉
迈巴赫车主7 分钟前
优先队列(PriorityQueue)
数据结构·算法
hai31524754310 分钟前
有规则的AI编制操作系统演进过程展示
人工智能·程序人生·算法·逻辑回归·创业创新
数据仓库搬砖人13 分钟前
SHAP 详解:从博弈论原理到 XGBoost 实战
算法
老鱼说AI13 分钟前
统计学习方法第七章:支持向量机精讲(超硬核长文深入预警!)
人工智能·深度学习·神经网络·算法·机器学习·支持向量机·学习方法
容器魔方16 分钟前
KubeEdge SIG AI: 基于KubeEdge-Ianvs的大模型联邦微调算法
大数据·人工智能·算法·云原生·容器·云计算
列星随旋25 分钟前
矩阵快速幂
java·算法·矩阵
z2005093027 分钟前
今日算法(回溯全排列)
c++·算法·leetcode
Boom_Shu28 分钟前
构造函数程序
数据结构·算法
MicroTech202535 分钟前
微算法科技(NASDAQ: MLGO)量子安全与区块链:量子神经网络QNN赋能动态共识与量子密钥分发
科技·算法·安全