LeetCode 566. 重塑矩阵 C++/Python

简介: LeetCode 566. 重塑矩阵 C++/Python

在 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]]

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • -1000 <= mat[i][j] <= 1000
  • 1 <= r, c <= 300

C++版

class Solution {
public:
  vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
    if (mat.size() * mat[0].size() != r * c)
    {
      return mat;
    }
    vector<vector<int>> ret(r, vector<int>(c));
    for (int i = 0; i < r * c; ++i)
    {
      ret[i / c][i % c] = mat[i / mat[0].size()][i % mat[0].size()];
    }
    return ret;
  }
};

Python版

#566_重塑矩阵
#暴力解法,把原矩阵按顺序遍历为一行,挨个取值放入新矩阵  时间复杂度O(mn)
class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        if (len(mat) * len(mat[0])) != (r * c):
            return mat
        li = list()
        for row in mat:
            for v in row:
                li.append(v)
        ret = list()
        tmp = list()
        for j in range(r):
            for i in range(c):
                tmp.append(li.pop(0))
            ret.append(tmp)
            tmp = []
        return ret
'''
方法二:将原矩阵映射为一行,然后映射为新矩阵,映射关系为
1 2 3                   1 2
4 5 6     ---->     1 2 3 4 5 6   ---->     3 4
                      5 6
old[0][0]     =  tmp[0]  =  new[0][0]
old[0][1]     =  tmp[1]  =  new[0][1]
old[0][3]     =  tmp[2]  =  new[1][0]
old[x/3][x%3]   =  tmp[x]  =  new[x/2][x%2]                     
old[x/old的列数][x%old的列数]   =  tmp[x]  =  new[x/new的列数][x%new的列数] 
'''
class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        if (len(mat) * len(mat[0])) != (r * c):
            return mat
        ret = [[0 for i in range(c)] for j in range(r)] #构造一个r*c的0矩阵
        for i in range(r * c):
            ret[i//c][i % c] = mat[i//len(mat[0])][i % len(mat[0])]
        return ret


相关文章
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
62 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
6月前
|
存储 算法 NoSQL
LeetCode第73题矩阵置零
文章介绍了LeetCode第73题"矩阵置零"的解法,通过使用矩阵的第一行和第一列作为标记来记录哪些行或列需要置零,从而在不增加额外空间的情况下解决问题。
LeetCode第73题矩阵置零
|
6月前
|
Python
Python计算误码率,输入是0-1比特流矩阵和小数矩阵
本文提供了一个Python函数calculate_ber,用于计算两个NumPy矩阵表示的二进制信号和接收信号之间的误码率(BER),其中包括信号与接收信号的比较、误差计数以及BER的计算过程,并给出了具体的使用示例。
104 2
|
6月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
146 2
|
4月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
163 10
|
4月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
182 4
|
4月前
|
算法 C++
Leetcode第59题(螺旋矩阵2)
这篇文章介绍了解决LeetCode第59题“螺旋矩阵II”的算法,通过C++编程实现按顺时针顺序填充一个n x n的正方形矩阵。
24 0
|
6月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
79 6
|
5月前
|
Python
Python 练习实例44 - Python 两个矩阵相加
Python 练习实例44 - Python 两个矩阵相加
|
6月前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
38 1