LeetCode566. Reshape the Matrix

来源:互联网 发布:二元自动交易软件 编辑:程序博客网 时间:2024/05/19 20:21
【题目】:实现矩阵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 npclass 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 newMarixelse:  #无法reshapereturn nums 




0 0
原创粉丝点击