Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
题目描述
在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据不变。
已知一个由二维数组表示的矩阵,和两个正整数r(行),c(列),将这个二维数组变换为r*c的矩阵。
如果不能由原矩阵转换为r*c的矩阵就输出原矩阵,否则输出转换后的矩阵。
测试样例
Input:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
原2*2矩阵不能变换为2*4矩阵,所以原样输出。
详细分析
考虑将[[1,2],[3,4]]转换为1*4的[1,2,3,4]。
首先我们需要两个循环,将原矩阵数据填入新矩阵
for(int i=0;i<r;i++){
for(int k=0;k<c;k++){
...
}
}
这里的难点是坐标的变换。它们对照关系如下:
newArr[0][0]=>oldArr[0][0]
newArr[0][1]=>oldArr[0][1]
newArr[0][3]=>oldArr[1][0]
newArr[0][4]=>oldArr[1][1]
这里我们考虑一种中间形式,先把新二维坐标转换为一维坐标,再将一维坐标转换为旧的二维坐标。比如,当我们填入newArr[0][3]时,它的一维坐标是0*c(新矩阵列数)+3,即3,然后3转化为旧的二维坐标就是old[3/原二维列数][3%原二维列数]
代码实现
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
//corner case for empty 2-dimension array
if(nums.size()==0){
return nums;
}
if(nums[0].size()==0){
return nums;
}
//illegal case
if(nums.size()*nums[0].size()!=r*c){
return nums;
}
std::vector<std::vector<int>> dv;
for(int i=0;i<r;i++){
std::vector<int> v;
for(int k=0;k<c;k++){
int p=i*c+k;
int idx1=p/nums[0].size();
int idx2=p%nums[0].size();
v.push_back(nums[idx1][idx2]);
}
dv.push_back(v);
}
return dv;
}
};
Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)的更多相关文章
- LeetCode 566. Reshape the Matrix (重塑矩阵)
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- LeetCode 566. Reshape the Matrix (C++)
题目: In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a n ...
- LeetCode 566 Reshape the Matrix 解题报告
题目要求 In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a ...
- LeetCode - 566. Reshape the Matrix (C++) O(n)
1. 题目大意 根据给定矩阵,重塑一个矩阵,r是所求矩阵的行数,c是所求矩阵的列数.如果给定矩阵和所求矩阵的数据个数不一样,那么返回原矩阵.否则,重塑矩阵.其中两个矩阵中的数据顺序不变(先行后列). ...
- leetcode 566 Reshape the Matrix 重塑矩阵
参考:https://www.cnblogs.com/grandyang/p/6804753.html 注意:复习容器的定义方法?? class Solution { public: vector&l ...
- 566. Reshape the Matrix - LeetCode
Question 566. Reshape the Matrix Solution 题目大意:给一个二维数组,将这个二维数组转换为r行c列 思路:构造一个r行c列的二维数组,遍历给出二给数组nums, ...
- 【LeetCode】566. Reshape the Matrix 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 变长数组 求余法 维护行列 相似题目 参考资料 日期 ...
- 【leetcode】566. Reshape the Matrix
原题 In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a ne ...
- [LeetCode&Python] Problem 566. Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
随机推荐
- ManualResetEvent 用法
第一.简单介绍 ManualResetEvent 允许线程通过发信号互相通信.通常,此通信涉及一个线程在其他线程进行之前必须完成的任务.当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时, ...
- c++ 插入排序算法
第一.算法描述 直插排序很容易理解,在我们打扑克牌的时候,每一次摸完牌,都会按数字大小或者花色,插入到合适的位置,直到摸完最后一张牌,我们手中的牌已经按大小顺序排列好了.这整个过程就是一个 ...
- 2015.3.7 Dll CString不能作为传入参数而要用char*
extern "C" __declspec(dllexport) void CalcArc_2(Point2D& pm, double am, double an, CSt ...
- 一次Mono解析Excel文档编码出错排查记录
最近在捯饬Asp.Net站点部署到Linux平台上面,在文档导入的操作中经过网上搜索采用了能够支持跨平台的ExcelDataReader组建.在本地windows上测试通过NuGet安装的组建,这货依 ...
- Camera.Parameters 参数 <转>
http://blog.csdn.net/aiqing0119/article/details/27680137 ------------------------------------------- ...
- 数据库开源框架ormlite
今天听说了ORM框架ORMLITE,特地去了解了一下. 该框架可以使用注解方式来生成数据库表,还封装了常用的数据库操作. 类似J2EE的HIBERNATE框架对数据库的处理. 省去了书写建表语句的麻烦 ...
- 关于taskaffinity属性的作用
意味着这activity更喜欢哪个TESK,具体见下方说明 当一个包含FLAG_ACTIVITY_NEW_TASK标志的intent启动一个activity时. 一个新的activity,默认地启动到 ...
- php 关于锁的一些看法
背景:在一个项目中,需要一次对数据很复杂的计算,其中一次计算需要花费大概30秒钟时间,大概需要查询一个比较大的表300次左右,然后还需要进行查询7-8次数据库,然后进行组合排序等功能,完成最终结果.对 ...
- array_unique() 函数移除数组中的重复的值
array_unique() 函数移除数组中的重复的值,并返回结果数组. 当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除. 返回的数组中键名不变.
- 数组中的最大值以及最小值的位置变换的问题(C++)
将一个5×5的数组中的最大值放到数组的中心位置 分析:遍历数组,找到最大的元素,然后将该元素与中心位置的元素交换位置 #include<iostream> #include <std ...