【题目】:实现
矩阵reshape操作,当reshape满足数组维度时返回结果,否则返回原数组即可。
【示例】:
Input: nums = [[1,2],[3,4]], r = 1, c = 4
Output: [[1,2,3,4]]
Input: nums = [[1,2], [3,4]],
r = 2, c = 4
Output: [[1,2], [3,4]]
【解法1】:看到这个题第一反应应该是想到numpy里面的reshape(),先不去考虑里面的逻辑,先解出来再说。
import numpy as np
class Solution(object):
def matrixReshpe(self, num, r, c):
try:
return np.reshape(num, (r, c)).tolist()
except:
return nums
【解法2】:
1)要想判断是否满足reshape条件,只需要判断数组元素个数与要reshape的两个维度的乘积是否相等即可。
2)
元素位置对应的关系 :如果将矩阵横向展开为一维数组,元素个数为n=origin_r * origin_c
在元素在一维数组中对应的位置i: 原矩阵位置[i/origin_c,i%origin_c] ,新矩阵位置[i/c,i%c] ,对于新矩阵位置[i,j]对应于一维矩阵[i*c,j]。
def matrixReshape(self, nums ,r ,c):
origin_r= len(nums) #行
origin_c=len(nums[0]) #列
if origin_c*origin_r == r*c :
temp=[num for row in nums for num in row] #展开成一维list
newMatrix = [[0 for j in xrange(c) ] for i in xrange(r) ] #xrange为可迭代对象;先创建新的零矩阵,再赋值
for i in xrange(r) :
for j in xrange(c):
newMatrix[i][j]=temp[i*c+j]
return newMarix
else: #无法reshape
return nums