-
2019-07-30 19:44:21
要求:逆时针转圈圈打印矩阵,如下
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09假设是5*5的列表 LENTH = 5 WIDTH = 5 # 先初始化全是0的矩阵 spin = [[0] * LENTH for i in range(WIDTH)] x = 0 y = 0 count = 1 # 方向 0 向下 1 右 2 上 3 左 direction = 0 while x < LENTH and y < WIDTH: spin[x][y] = count # 如果是最大数,则退出循环 if spin[x][y] == LENTH * WIDTH: break count += 1 if direction == 0: if x == LENTH - 1 or spin[x + 1][y] != 0: direction += 1 y += 1 continue else: x += 1 elif direction == 1: if y == WIDTH - 1 or spin[x][y + 1] != 0: direction += 1 x -= 1 continue else: y += 1 elif direction == 2: if x == 0 or spin[x - 1][y] != 0: direction += 1 y -= 1 continue else: x -= 1 elif direction == 3: if spin[x][y - 1] != 0: direction = 0 x += 1 continue else: y -= 1 for i in spin: for j in i: print('%02d' % j, ' ' * 2, end='') print('')
简单思路:主要是灵活改变二维列表下标的值。分四个方向,
下:x+1,y不变
右:x不变,y+1
上:x-1,y不变
左:x不变,y-1
当到达边界或者同方向下一个位置的值不为0时改变方向更多相关内容 -
剑指offer-python:27.旋转矩阵and顺时针打印矩阵and逆时针打印
2021-08-23 22:49:30旋转矩阵是顺时针打印矩阵的前提。首先,学会旋转矩阵,后面就容易了。 1.旋转矩阵:如下所示,旋转效果 [[1,2,3], [[7,4,1], [4,5,6], ---> [8,5,2], [7,8,9]] [9,6,3]] 技巧:使用zip 代码:这里*解包,...旋转矩阵是顺时针打印矩阵的前提。首先,学会旋转矩阵,后面就容易了。
1.旋转矩阵:如下所示,旋转效果
[[1,2,3], [[7,4,1], [4,5,6], ---> [8,5,2], [7,8,9]] [9,6,3]]
技巧:使用zip
代码:这里*解包,zip压缩,zip后变成zip类型,zip会把原有矩阵从第一列开始,把每一列打包成一个元祖,把元祖强转为list达到矩阵转置的效果
def tans90(matrix): matrix = matrix[::-1] res = [] for line in zip(*matrix): print('line = ',line)
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:
line = (7, 4, 1) line = (8, 5, 2) line = (9, 6, 3)
这样就实现了一个矩阵的旋转(顺时针)
-------------------------------------------------------------------------------------------------------------------
2.顺时针打印矩阵,可以利用上面的方法,并把顺序打印出来,即:1-2-3-6-9-8-7-4-5.
代码:
def spiralOrder(matrix): res = [] while matrix: print('matrix = ',matrix) res += matrix.pop(0) matrix = list(zip(*matrix))[::-1] return res
输出并显示每次matrix:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] matrix = [(6, 9), (5, 8), (4, 7)] matrix = [(8, 7), (5, 4)] matrix = [(4,), (5,)] matrix = [(5,)]
res = [1, 2, 3, 6, 9, 8, 7, 4, 5]
递归的方法(leetcode,一行实现):
def spiralOrder( matrix): return (matrix and list(matrix.pop(0)) + spiralOrder(list(zip(*matrix))[::-1]))
---------------------------------------------------------------------------------------------------------------------------
3.逆时针打印:同理,使用顺时针旋转,得到的数值再逆即可。
代码:
def anti(matrix): res = [] res += matrix.pop(0)[::-1] while matrix: matrix = matrix[::-1] matrix = list(zip(*matrix)) print('msss=',matrix) res += list(matrix.pop(0))[::-1] return res
打印输出:
msss= [(7, 4), (8, 5), (9, 6)] msss= [(9, 8), (6, 5)] msss= [(6,), (5,)] msss= [(5,)]
最后输出:
[3, 2, 1, 4, 7, 8, 9, 6, 5]
-
由外向内顺时针&逆时针旋转矩阵
2021-02-11 05:10:21} 输出结果: 请输入旋转矩阵边的大小:7 顺时针: 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 逆时针: 1 24...代码如下:
#include
using namespace ::std;
#define N 10
int a[N][N];
void InitSeq( int n )
{
int value = 1;
int i, j;
for( i = 0; i < n/2; i++ ) // n/2是圈数
{
for( j = i; j < n - i; j++ ) //向右增长
{
a[j][i] = value++;
}
for( j = i + 1; j < n - i; j++ ) //向下增长
{
a[n-1-i][j] = value++;
}
for( j = n - 2 - i; j > i; j-- ) //向左增长
{
a[j][n-1-i] = value++;
}
for( j = n - 1 - i; j > i; j-- ) //向上增长
{
a[i][j] = value++;
}
//n为奇数时,最中间数的值
if( n % 2 == 1 )
a[n/2][n/2] = value;
}
}
void printSeq( int n )
{
cout << "顺时针:" << endl;
for( int i = 0; i < n; i++ )
{
for( int j = 0; j < n; j++ )
{
printf( "%5d", a[j][i] );
}
printf("\n");
}
cout << "逆时针:" << endl;
for( int i = 0; i < n; i++ )
{
for( int j = 0; j < n; j++ )
{
printf( "%5d", a[i][j] );
}
printf("\n");
}
}
int main()
{
int n;
cout << "请输入旋转矩阵边的大小:";
cin >> n;
InitSeq(n);
printSeq(n);
system( "PAUSE");
return 0;
}
输出结果:
请输入旋转矩阵边的大小:7
顺时针:
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
逆时针:
1 24 23 22 21 20 19
2 25 40 39 38 37 18
3 26 41 48 47 36 17
4 27 42 49 46 35 16
5 28 43 44 45 34 15
6 29 30 31 32 33 14
7 8 9 10 11 12 13
请按任意键继续. . .
-
Python笔试题之蛇形矩阵:
2020-12-21 23:40:45输入一个正整数N(N不大于100),输出一个n行的蛇形矩阵。 示例输入: 5 示例输出: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 解法一: while True: try: N = int(input()) tmp_begin = 1 # 第一行的数 for i in ... -
Python 矩阵顺时针逆时针旋转90度
2021-09-18 20:17:56Python中对矩阵进行顺时针或者逆时针旋转90度操作 程序 矩阵: matrix = [[1,2,3],[4,5,6],[7,8,9]] matrix 结果: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 顺时针旋转90度: list(zip(* matrix[::-1])) [(7, 4, 1), ...前言
Python中对矩阵进行顺时针或者逆时针旋转90度操作
程序
矩阵:
matrix = [[1,2,3],[4,5,6],[7,8,9]] matrix
结果:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
顺时针旋转90度:
list(zip(* matrix[::-1]))
[(7, 4, 1), (8, 5, 2), (9, 6, 3)]
逆时针旋转90度
list(zip(* matrix))[::-1]
[(3, 6, 9), (2, 5, 8), (1, 4, 7)]
总结
- zip()函数,对数据进行压缩
l1 = [1,2,3] l2 = [4,5,6] zips = zip(l1,l2) zips list(zips) # 打包为元组的列表,压缩
结果
[(1, 4), (2, 5), (3, 6)]
- zip(*)函数,对数据进行解压
l1 = [1,2,3] l2 = [4,5,6] zipss = zip(*zip(l1,l2)) # 解压 list(zipss)
结果
[(1, 2, 3), (4, 5, 6)]
-
python 逆时针
2020-11-26 04:38:080. 前言现主要实现不使用额外空间完成矩阵元素逆时针旋转90度。 给出一个矩阵,得到他的转置矩阵,输入以及要求输出如下:e.g.0.1 示例1 3*3矩阵input1 2 34 5 67 8 9 output:3 6 9 2 5 8 1 4 7 e.g.0.2 示例2 4*4... -
python实现顺时针打印矩阵
2021-01-21 18:23:12思路:每次打印并删除矩阵的第一行,然后将矩阵逆时针翻转90度,直至打印出全部结果 具体代码实现如下: # coding:utf-8 class Solution(object): def printMatrix(self, matrix): # 打印矩阵 result = [] ... -
剑指Offer(Python多种思路实现):顺时针打印矩阵(同LeetCode 螺旋矩阵打印)
2020-12-22 14:29:50题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,... -
在Python中将方形矩阵逆时针旋转90度的程序
2021-02-03 23:53:31假设我们有一个正方形矩阵,我们必须将其逆时针旋转90度。147258369那么输出将是7894561个23为了解决这个问题,我们将遵循以下步骤-如果矩阵为空,则返回一个空白列表n:=矩阵的行数对于矩阵中的每一行,执行反转行... -
python实现二维数组顺/逆时针打印
2020-08-28 10:04:29python实现二维数组顺/逆时针打印 需求 对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。话不多说,直接上思路和代码! 思路和关键算法 这个问题不熟悉矩阵的同学可能会想着定义各个方向... -
python 实现 矩阵逆时针旋转
2013-10-22 10:19:24如果矩阵是一个深度为4,三次嵌套的矩阵,其中最小列向量包涵4个数值,三个空间坐标值,X,Y,Z, 外加一个时间 T 值,通过矩阵的方式来表示四维空间,是不是更有表现力和依据感呢??? 记得当年学习相对论时... -
逆时针旋转矩阵M * N的每个环
2021-07-17 02:28:59[i]=prev prev = curr bottom -=1 for i in range(bottom,top-1,-1): curr = matrix[i][right] matrix[i][right]=prev prev = curr right -=1 I hope you can apply this #python code to #java, logic is the same.... -
顺(逆)时针打印矩阵
2020-08-08 21:35:13顺时针打印矩阵 剑指 Offer 29. 顺时针打印矩阵 ...然后将剩下元素逆时针旋转 90 度,再依次循环进行。 逆时针:竖排提取 → 元素翻转 。 def spiralOrder(self, matrix: List[List[int]]) -> List[int]: -
python将二维数组逆时针旋转45°
2021-08-16 09:36:27#二维数组逆时针旋转45° def rotate(array): if array==None: return 0 length=len(array) #右上角输出 i=length-1 while i>0: #外层循环用于控制行数,如n*n矩阵右上角输出有n-1行 row=0 col=i while ... -
矩阵旋转90° Python
2020-12-11 13:59:08给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:... -
【Python螺旋输出所有矩阵元素】| 顺时针&逆时针
2022-02-21 20:51:10顺时针实现&逆时针实现矩阵遍历。 逆时针实现 -
python顺时针打印矩阵
2021-07-07 21:29:34思路:顺时针打印数组就是通过索引遍历数组,但由于是顺时针遍历,索引变化多,没有办法仅仅根据索引达到顺时针输出的目的,所以应该想到,怎么样变换矩阵,利用常规遍历输出矩阵,顺时针输出需要逆时针旋转矩阵,... -
python数据分析建模每日一题(5月2日)——顺时针逆时针打印矩阵
2018-05-02 17:29:22#顺时针打印 list1 = [[2,3,4,5],[5,6,7,8],[3,4,5,9],[10,11,23,45],[1,4,7,2]] left = 0 #列起始 top = 0 #行起始 right = len(list1[0]) #-1为列结束 bottom = len(list1) #-1为行结束 print ('first') result =... -
今日学习在线编程题:逆时针旋转矩阵
2022-06-08 16:22:20今日学习在线编程题:逆时针旋转矩阵 -
Python实现旋转打印矩阵
2019-04-18 00:12:45思路:逆时针旋转矩阵,打印完一行删除一行,直到打印结束 class Solution(object): def printMatrix(self, matrix): # 打印矩阵 result = [] while matrix: result += matrix.pop(0) if matrix: ... -
矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)
2018-12-19 19:11:55矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度第一版 现主要实现不使用额外空间完成矩阵元素逆时针旋转90度。 给出一个矩阵,得到他的转置矩阵,输入以及要求输出如下: e.g.0.1 示例1 3*3矩阵 Inpu... -
Python一行代码解决矩阵旋转的问题
2021-01-02 22:36:56今天刷《剑指offer》的时候碰到这样一道题: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 ...最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好 -
将下面矩阵分别按顺时针90度,逆时针90度,和旋转180度,打印出来
2020-12-08 11:58:16} } 样例输入: 4 5 45 7 64 84 65 15 5 35 97 46 4165 967 46 48 46 123 4 56 8 54 顺时针90度后: 123 4165 15 45 4 967 5 7 56 46 35 64 8 48 97 84 54 46 46 65 逆时针90度后: 65 46 46 54 84 97 48 8 64 35 ... -
矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度
2018-12-05 18:50:15矩阵操作试题(C++/Python) 系列目录:矩阵操作试题(C++/Python)——目录 0. 前言 给出一个矩阵,得到他的转置矩阵,输入以及要求输出如下: e.g.0.1 示例1 3*3矩阵 Input 1 2 3 4 5 6 7 8 9 Output: 3 6 9 2 5 8... -
顺时针打印矩阵的python代码实现
2020-04-23 17:32:33偶然发现xxx中的一道通过率很低的题,本想小试身手,奈何经过了一天的奋战,终于把这道题的...输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10... -
顺时针打印矩阵(python)
2020-12-14 16:53:24# -*- coding:utf-8 -*-class Solution:# matrix类型为二维列表,需要返回列表def printMatrix(self, matrix):# write code here#先取矩阵的第一行,接着将剩下作为新矩阵进行一个逆时针90度的翻转,接着获取第一行... -
Python不开辟新的内存空间实现矩阵的转置、顺时针、逆时针旋转90度
2021-03-18 14:44:30a = [[1,2,3], [4,5,6], [7,8,9]] row = len(a) #实现矩阵的转置 for i in range(row): for j in range(row): ...#实现矩阵逆时针旋转90度 for i in range(row // 2): for j in range(i,row-1-i): .