矩阵旋转

# -*- coding:utf-8 -*-
import sys
import copy

# 逆时针旋转90
# 空间复杂度O(n^2),矩阵行列数无约束
def ni_convert(a):
	m = len(a[0])
	b = [[j[m-1-i] for j in a] for i in range(m)]
	return b

# 逆时针旋转90
# 前提是矩阵为N*N方阵
# 空间复杂度O(1)
# 先对角线交换,再行两端向中间互换
def ni_convert2(a):    #主对角线翻转
	n = len(a)
	for i in range(n):
		for j in range(0,i):
			a[i][j],a[j][i] = a[j][i],a[i][j]
	for i in range(n//2):
		a[i],a[n-1-i] = a[n-1-i],a[i]
	return a

# 顺时针旋转90
def shun_convert2(a):
	n = len(a)
	for i in range(n):
		for j in range(0,n-1-i):   #副对角线翻转
			a[i][j],a[n-1-j][n-1-i] = a[n-1-j][n-1-i],a[i][j]  #注意这里不同
	for i in range(n//2):
		a[i],a[n-1-i] = a[n-1-i],a[i]
	return a


num = [[1,2,3],[4,5,6]]
print(ni_convert(num))
fangzhen = [[1,2,3],[4,5,6],[7,8,9]]
print(ni_convert2(fangzhen))
#注意传参数引用,数组会改变,所以逆时针后再顺时针刚好回到原数组
print(shun_convert2(fangzhen)) 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值