Leetcode566. 重塑矩阵

在 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

 

Python解法

复制代码
from typing import List
class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        m,n = len(mat),len(mat[0])
        #对比重构矩阵的个数和原来矩阵的个数不一致,则返回原来的矩阵
        if (m * n != r * c):
            return mat
        else:
            templist, mat1, count = [], [], 0
            #先遍历整个list 输出子list,再从子list中遍历里面的元素,放在临时的列表中,
            #如果列表中个数达到了列数,则把这个list放在重构list中作为一行
            for childlist in mat:
                for item in childlist:
                    templist.append(item)
                    count += 1
                    if (count == c):
                        mat1.append(templist)
                        #这边如果不清空则会把前面的临时list中的数也输出出来
                        count=0
                        templist=[]
            return mat1
        
if __name__ == '__main__':
    a = Solution()
    b = a.matrixReshape([[1, 2], [3, 4]],4,1)
    print(b)
复制代码

 

 

 

java解法

复制代码
   public int[][] matrixReshape(int[][] nums,int r,int c){
        int[][] res = new int[r][c];
        if(nums.length ==0 || r*c != nums.length*nums[0].length) return nums;
        //建立队列
        Queue<Integer> que = new LinkedList<>();
        //将数组的元素放到队列中
        for(int i=0;i<nums.length;i++){
            for(int j=0;j<nums[0].length;j++){
                que.add(nums[i][j]);
            }
        }
        
        //将队列中的元素放到指定的数组中
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                res[i][j] = que.remove();
            }
        }
        return res;
    }

}
复制代码

 

posted @   陈晓猛  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示