开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
题目描述
原题链接 :
566. 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 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]]
提示:
- m == mat.length
- n == mat[i].length
- 1 <= m, n <= 100
- -1000 <= mat[i][j] <= 1000
- 1 <= r, c <= 300
思路分析
- 若原矩阵的行列之积不等于rc之积,就表明不能重塑,则返回原矩阵
- 建立一个rc的res矩阵
- 将原矩阵的数据加入到一个新的一维矩阵ans中
- 将一维矩阵ans的数按照行顺序依次赋值到r*c矩阵中,返回res
AC 代码
class Solution(object):
def matrixReshape(self, nums, r, c):
"""
:type nums: List[List[int]]
:type r: int
:type c: int
:rtype: List[List[int]]
"""
if len(nums) * len(nums[0]) != r * c: return nums
res = [[-1]*c for i in range(r)]
ans = []
for num in nums:
for i in num:
ans.append(i)
m = 0
while m < r:
n = 0
while n < c:
res[m][n] = ans.pop(0)
n += 1
m += 1
return res
总结
二维数组转一维数组突然有点遗忘了都,matlab都还给大学老师啦。