我一直在研究破解编码面试,编码挑战之一是旋转矩阵
Input = [
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]]
Output = [
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]]
我了解解决方案的第一部分
def rotateMatrix(matrix):
# Transpose the Matrix
for i in range(len(matrix)):
for j in range(i + 1, len(matrix)):
# Switch the row and column indices
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
我不明白的是解决方案的最后一部分:看起来嵌套的 for 循环正在执行某种交换,就像上面的嵌套循环所做的那样,但是我感到困惑的是“range(len(matrix[r]/ /2)" 然后是 " oppI = len(matrix[r]) - 1 - i. 有没有人可以帮助阐明这些代码行的具体工作方式?我主要在熊猫工作,真的需要了解更多“有机” python 所以任何帮助将不胜感激!
# Reverse every row
for r in range(len(matrix)):
for i in range(len(matrix[r]) // 2):
# oppI is the opposing index to i
oppI = len(matrix[r]) - 1 - i
print(oppI)
matrix[r][i], matrix[r][oppI] = matrix[r][oppI], matrix[r][i]
在第二部分,您只是反转矩阵的行。
它用于range(len(matrix[r]//2)
将列表行的前半部分反转到后半部分。
它与(转置后)相同
new_matrix = [i[::-1] for i in matrix]
这里的矩阵是转置矩阵
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句