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
andcolumn 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.
2、解题思路
(1)把原数组转换为一维数组
vals = [val for row in nums for val in
row]
(2)判断原数组能够转换为要求数组,若可转换,转换为要求数组,先产生符合要求的全零数组,在赋予相应值。
ans=[[0 for col in xrange(c)] for row in
xrange(r)]
代码如下:
class Solution(object):
def
matrixReshape(self, nums, r, c):
"""
:type nums:
List[List[int]]
:type r: int
:type c: int
:rtype:
List[List[int]]
"""
m=len(nums)
n=len(nums[0])
k=0
if m*n!=r*c:
return nums
vals = [val for row in nums
for val in row]
ans=[[0 for col in xrange(c)]
for row in xrange(r)]
for i in
xrange(r):
for j in
xrange(c):
ans[i][j]=vals[k]
k=k+1
return ans