题目
输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]]
思路
将原二维数组变成一维数组,在重新放入变换后的二维数组。
可以使用一维数组过渡,也可以直接用整数除法/和取余%来直接转换数组。
数组vector容器声明
一维数组(长度size与初始值num)
vector<int> arr(size, num);
二维数组(r行c列)
vector<vector<int>> ans(r, vector<int>(c));
解法
用1维数组过渡
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
int m = mat.size(), n = mat[0].size();
int num = m * n;
int index1 = 0;
int index2 = 0;
int array[num];
vector<vector<int>> ans(r, vector<int>(c));
if((r * c) != (m * n))
return mat;
else
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
array[index1++] = mat[i][j];
}
}
for(int i = 0; i < r; i++)
{
for(int j = 0; j < c; j++)
{
ans[i][j] = array[index2++];
}
}
return ans;
}
};
直接除法取余转换
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size();
int n = nums[0].size();
if (m * n != r * c) {
return nums;
}
vector<vector<int>> ans(r, vector<int>(c));
for (int x = 0; x < m * n; ++x) {
ans[x / c][x % c] = nums[x / n][x % n];
}
return ans;
}
};
参考
https://leetcode.cn/problems/reshape-the-matrix/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)