LeetCode 566. Reshape the Matrix

来源:互联网 发布:grub2启动ubuntu 编辑:程序博客网 时间:2024/06/05 10:59

题目:
In MATLAB, there is a very useful function called ‘reshape’, which can reshape a matrix into a new one with different size but keep its original data.

You’re given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row number and column number of the wanted reshaped matrix, respectively.

The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.

If the ‘reshape’ operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.

Example 1:
Input:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

Example 2
Input:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.

Note:
1. The height and width of the given matrix is in range [1, 100].
2. The given r and c are all positive.

思路:
就是实现一个MATLAB中的reshape函数,如果大小超过了原来的个数,返回原来的数组;如果刚好,则返回reshape后的r*c的数组。
其实就是要注意新数组的索引和原数组索引的对应关系。

res[i][j] = nums[(i*c + j) / col][(i*c + j) % col];

上面这句代码就是对应关系,自己体会。

代码实现:

class Solution {public:    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {        int row = nums.size();//分别计算nums的行和列的大小        int col = nums[0].size();        if (r*c != row*col){//如果row*col和要求的r*c的大小不一样            return nums;//返回原来的vector nums        }        vector<vector<int> > res(r,vector<int>(c,0));//初始化vector为r行c列        for (int i = 0; i < r; ++i){            for (int j = 0; j < c; ++j){//将原来的值赋给新的res,注意索引                res[i][j] = nums[(i*c + j) / col][(i*c + j) % col];            }        }        //上面五行代码可以用下面四行代替,都是一个道理        //int len = r*c;        //for (int i = 0; i < len; ++i){        //    res[i / c][i%c] = nums[i / col][i%col];        //}        return res;    }};

输出结果: 39ms

0 0
原创粉丝点击