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
}
相关推荐
小O的算法实验室2 小时前
2025年IEEE TETCI,异构无人机取送货问题中的转运优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
chao1898448 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
沪漂阿龙8 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
難釋懷8 小时前
Redis数据结构-Set结构
数据结构·redis·bootstrap
little~钰9 小时前
倍增算法和ST表
算法
知识领航员10 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
薛定e的猫咪10 小时前
因果推理研究方向综述笔记
人工智能·笔记·深度学习·算法
如何原谅奋力过但无声11 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表
平行侠11 小时前
037插入排序 - 整理扑克牌的算法
数据结构·算法