# [LeetCode 566. Reshape the Matrix](https://leetcode.com/explore/challenge/card/july-leetcoding-challenge-2021/608/week-1-july-1st-july-7th/3803/)
### Daily challenge Jul 5, 2021 (EASY)
>In MATLAB, there is a handy function called **`reshape`** which can reshape an **`m x n`** matrix into a new one with a different size **`r x c`** keeping its original data.
>
>You are given an m x n matrix mat and two integers r and c representing the number of rows and the number of columns of the wanted reshaped matrix.
>
>The reshaped matrix should 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.

:::info
**Example 1:**
**Input:** mat = [[1,2],[3,4]], r = 1, c = 4
**Output:** [[1,2,3,4]]
:::

:::info
**Example 2:**
**Input:** mat = [[1,2],[3,4]], r = 2, c = 4
**Output:** [[1,2],[3,4]]
:::
:::warning
**Constraints:**
* m == mat.length
* n == mat[i].length
* 1 <= m, n <= 100
* -1000 <= mat[i][j] <= 1000
* 1 <= r, c <= 300
:::
---
### Approach 1 :
**`4 ms ( 99.41% )`** **`O()`**
If **`m * n != r * c`**, the reshape operation is illegal. ---> return original matrix.
Otherwise, store how many elements we have used in **`count`**, and **`ans[i][j] = mat[count/n][count%n]`**.
```cpp=1
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
int m = mat.size();
int n = mat[0].size();
if(m * n != r * c) return mat;
int count = 0;
vector<vector<int> > ans(r, vector(c, 0));
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
ans[i][j] = mat[count/n][count%n];
count++;
}
}
return ans;
}
};
```