|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位鱼油大家晚上好
做了一下25课的顺时针旋转矩阵中所有元素,然后想转换一下搞个按照逆时针旋转,然而转来转去被搞懵逼了
不过还做出来了嘻嘻。
请各位帮忙看一下做对没有?思路是否正确?有没有简且好的方案?
顺便也做一下笔记
- matrix = [[1,2,3,4],
- [5,6,7,8],
- [9,10,11,12]]
- ########## 解析 ##########
- #初始化矩阵的四个方向:顶部(top), 底部(low):表示行的长度 , 左边(left) , 右边(right):表示列的长度
- #因为是逆时针旋转所以:[1,5,9]-->[10,11,12]-->[8,4]-->[3,2]-->[6]-->[7]
- #有共同面就只需重复执行那一行即可
- #<1>,从上到下遍历:(top,low+1) ----> (low,left)
- #<2>,从左到右遍历:(left+1,low) ---> (low,right+1) **********
- #<3>,从下到上遍历:(low-1,right) ---> (top-1,right) *********
- #<4>,从有到左遍历:(top,right-1) ---> (left,top)
- #经过一轮的遍历,那么相当于走了外层一圈,也就是 left+1、right-1、top+1、low-1
- ###每前进一层 left 就加 1,right 就减 1,top 和 low 也是一样,那么无论这个二维列表有多大,都会遇到一个矛盾点,那就是 left 终究会大于 right,top 终究会大于 low这个就是结束的条件啦!
- #与矩阵数据关联
- #获取矩阵 行 的长度赋值给x
- #获取矩阵 列 的长度赋值给y
- x = len(matrix)
- y = len(matrix[0])
- left = 0 #左面
- right = y - 1 #右面 , 表示列
- top = 0 #顶部
- low = x - 1 #底部 , 表示行
- record = [] #存储数据
- while left <= right and top <= low:
- #从下到上遍历
- for col in range(top,low+1):
- record.append(matrix[col][left])
- #从左到右遍历
- for row in range(left+1,right+1):
- record.append(matrix[low][row])
- if left < right and top < low:
- #从下到上遍历
- for col in range(low-1 ,top-1,-1):
- record.append(matrix[col][right])
- #从右到左遍历
- for row in range(right-1,left,-1):
- record.append(matrix[top][row])
- #最后一行元素 判断是否退出程序
- left += 1
- right -= 1
-
- top += 1
- low -= 1
- print(record)
复制代码
|
|