1、题目

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。

给出一个由二维数组表示的矩阵,以及两个正整数rc,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。

如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

示例 1:

输入:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
输出:
[[1,2,3,4]]
解释:
行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。

示例 2:

输入:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
输出:
[[1,2],
[3,4]]
解释:
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。

注意:

  1. 给定矩阵的宽和高范围在 [1, 100]。
  2. 给定的 r 和 c 都是正数。

2、思路

先将原始矩阵转化成一个迭代器,所有数都放进去,【也可以放进队列中】,然后创建一个新的矩阵(大小为reshape的大小),一个一个往里放数。

将列表转化成迭代器可以用itertools模块下chain.from_iterable(列表) 函数。然后用next函数一个一个取数

还有一个重点:创建二维矩阵的一种方法:

for i in range(r):
                    result.append([])
                    for j in range(c):
                        result[i].append(next(chainnum))

第二种:result = [ [ ] * r for i in range(c) ] 【列表生成器】

3、代码

from itertools import chain
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 not nums:
return nums
elif not r or not c:
return nums
else:
h=len(nums)
l=len(nums[0])
if h*l != r*c:
return nums
else:
chainnum = chain.from_iterable(nums)
result = []
for i in range(r):
result.append([])
for j in range(c):
result[i].append(next(chainnum))
return result

最新文章

  1. 在双系统(Windows与Ubuntu)下删除Ubuntu启动项
  2. 利用HtmlAgilityPack库进行HTML数据抓取
  3. bootstrap-图文混排 media
  4. java笔试三
  5. PCA的数学原理
  6. 【Hadoop学习】HDFS中的集中化缓存管理
  7. 使用xdebug+eclipse远程调试centOS7上的PHP代码
  8. Building Workspace速度慢的原因
  9. jQuery 如何写插件 - 第一步
  10. HDU 别easy在一系列的
  11. partial 函数
  12. CharacterEncodingFilter -处理字符格式
  13. Java内存模型之重排序
  14. 使用JWT的OAuth2的SSO分析
  15. Django 信号signal
  16. Java Annotation详解 理解和使用Annotation
  17. nw.js---创建一个hello word的方法
  18. 在 Docker 上运行一个 RESTful 风格的微服务
  19. python 抓取网上OJ试题
  20. 使用Windows Live Writer拉取之前写的博客

热门文章

  1. sklearn学习汇总
  2. JQ淡入淡出效果
  3. /etc/default/useradd文件内容及对应功能
  4. 设置ssh会话过期时间
  5. python简单post信息
  6. 关于struts值栈的总结,前端页面如何使用标签取得值栈中的数据
  7. oracle double和float,number
  8. java并发之阻塞队列
  9. UVA11827 Maximum GCD
  10. Tsinsen A1206. 小Z的袜子