总结:
fun1和fun2思想上是一致的,但是fun2的代码更加的简洁
我最开始其实觉得挺难的,后面写了才发现就这样
写之前尽量想好大致的思路,然后记下来
这个题目就是你循环你的,我记录我的
def fun1(mat,r,c):
'''
首先,判断是否可以进行转换
我的想法时,首先为了我写代码的方便,转化成一行的字符,不过感觉没必要了
可以知道i+j=cur1+cur2
所以就直接遍历原数组,加上两个cur1和cur2
:param mat:
:param r:
:param c:
:return:
'''
if len(mat) * len(mat[0]) != r * z:
return mat
erwei = [[0 for i in range(z)] for j in range(r)]
hang = 0
lie = 0
m = len(mat)
n = len(mat[0])
for i in range(m):
for j in range(n):
cur_item = mat[i][j]
erwei[hang][lie] = cur_item
lie += 1
if lie % z == 0:
lie = 0
hang += 1
return erwei
def fun2(mat,r,c):
'''
怎么说,官方的代码和我最开始想的前面是一致的哈哈哈
就是压缩成一维数组(不过他并没有实际压缩)
那么当前下标i时
erwei[i//c][i%c]=mat[i//n][i%n]
怎么理解?
看我上面的代码
if lie%c==0:
lie=0
hang+=1
也就是说,hang=c的倍数,,lie等于余数
所以自然就有了上面的简洁代码
:param mat:
:param r:
:param c:
:return:
'''
if len(mat) * len(mat[0]) != r * z:
return mat
erwei = [[0 for i in range(z)] for j in range(r)]
n = len(mat[0])
m = len(mat)
for i in range(m * n):
erwei[i // z][i % z] = mat[i // n][i % n]
return erwei
print(fun2())