LeetCode566. Reshape the Matrix

【题目】:实现 矩阵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 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值