Reshape the Matrix(leetcode)

来源:互联网 发布:什么是字符串数组 编辑:程序博客网 时间:2024/06/03 10:30

Reshape the Matrix

  • 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 = 4Output: [[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 = 4Output: [[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.

解析

函数reshape就是将原来n * m的二维数组变成r * c的新的二维数组。

  1. n * m == r * c,则将数组进行转换
  2. n * m != r * c,则直接返回原数组

解决

class Solution {public:vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {        int row = nums.size();        int col = nums[0].size();        if (row * col == r * c) {            vector<vector<int>> result;            vector<int> temp;            for (int i = 0; i < row; i++) {                for (int j = 0; j < col; j++) {                    /* vector<vector<int>>虽然可以看作是一个二维数组的容器,但是不能直接循环赋值,例如:`result[a][b] = nums[i][j]`*/                    temp.push_back(nums[i][j]);                    if (temp.size() == c) {                        result.push_back(temp);                        temp.clear();                    }                }            }            return result;        } else {            return nums;        }    }};
原创粉丝点击