Reshape the Matrix

题目描述

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 twopositiveintegersrandcrepresenting therownumber andcolumnnumber of the wanted reshaped matrix, respectively.

The reshaped matrix need to be filled with all the elements of the original matrix in the samerow-traversingorder 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.

题目链接

https://leetcode.com/problems/reshape-the-matrix/description/

Python

class Solution(object):
def matrixReshape(self, nums, r, c):
"""
:type nums: List[List[int]]
:type r: int
:type c: int
:rtype: List[List[int]]
"""
if len(nums) * len(nums[0]) != r * c:
return nums
data = [[0 for i in xrange(c)] for j in xrange(r)]
i = 0
j = 0
for row in nums:
for col in row:
data[i][j] = col
j += 1
if j == c:
j = 0
i += 1
return data