LeetCode 566. 重塑矩阵
发布日期:2021-07-01 03:23:54 浏览次数:2 分类:技术文章

本文共 1612 字,大约阅读时间需要 5 分钟。

1. 题目

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

给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。

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

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

示例 1:输入: nums = [[1,2], [3,4]]r = 1, c = 4输出: [[1,2,3,4]]解释:行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。示例 2:输入: nums = [[1,2], [3,4]]r = 2, c = 4输出: [[1,2], [3,4]]解释:没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。注意:给定矩阵的宽和高范围在 [1, 100]。给定的 r 和 c 都是正数。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reshape-the-matrix

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 使用额外空间
class Solution {
public: vector
> matrixReshape(vector
>& nums, int r, int c) {
int r0 = nums.size(), c0 = nums[0].size(); if(r*c != r0*c0) return nums; vector
row; vector
> matrix; int i, j, k = 0; for(i = 0; i < r0; ++i) { for(j = 0; j < c0; ++j) { row.push_back(nums[i][j]); k++; if(k == c) { matrix.push_back(row); k = 0; row.clear(); } } } return matrix; }};

44 ms 12.1 MB

  • 不使用额外空间
class Solution {
public: vector
> matrixReshape(vector
>& nums, int r, int c){
int r0 = nums.size(), c0 = nums[0].size(); if(r*c != r0*c0) return nums; vector
> matrix(r,vector
(c)); int i, j, x = 0, y = 0; for(i = 0; i < r0; ++i) { for(j = 0; j < c0; ++j) { matrix[x][y++] = nums[i][j]; if(y==c) { x++; y=0; } } } return matrix; }};

20 ms 10.9 MB

转载地址:https://michael.blog.csdn.net/article/details/105717990 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 598. 范围求和 II
下一篇:LeetCode 551. 学生出勤记录 I

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月07日 17时23分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章