Reshape the Matrix——leetcode

之前有刷过一些题,但都坚持不下去,现在搞个小博客,希望自己能坚持下去吧~~

 

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.

看意思就是重组一个矩阵:

  我的思路就是把矩阵拉成一行N列的,反正就是一行。 直接上个代码:

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        
        int sizeR = nums.size(), sizeC = nums[0].size();
        
        if(sizeR*sizeC != r*c)//个数不同怎么能继续:)
        {
            return nums;
        }
        
        vector<vector<int>> res(r, vector<int>(c, 0));
        
        for(int i=0; i!=sizeR*sizeC; ++i)
        {
            res[i/r][i%c] = nums[i/sizeR][i%sizeC];//i/r某一行,i%c某一行中的某一列
        }
        return res;
    }
};

  看到discuss里面也有这种解法~~~

posted @ 2018-03-17 20:49  还是说得清点吧  阅读(144)  评论(2编辑  收藏  举报