精华内容
下载资源
问答
  • 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时改变方向

    更多相关内容
  • 旋转矩阵是顺时针打印矩阵的前提。首先,学会旋转矩阵,后面就容易了。 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]

    展开全文
  • } 输出结果: 请输入旋转矩阵边的大小: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

    请按任意键继续. . .

    展开全文
  • 输入一个正整数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度操作 程序 矩阵: 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:08
    0. 前言现主要实现不使用额外空间完成矩阵元素逆时针旋转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...
  • 思路:每次打印并删除矩阵的第一行,然后将矩阵逆时针翻转90度,直至打印出全部结果 具体代码实现如下: # coding:utf-8 class Solution(object): def printMatrix(self, matrix): # 打印矩阵 result = [] ...
  • 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,...
  • 假设我们有一个正方形矩阵,我们必须将其逆时针旋转90度。147258369那么输出将是7894561个23为了解决这个问题,我们将遵循以下步骤-如果矩阵为空,则返回一个空白列表n:=矩阵的行数对于矩阵中的每一行,执行反转行...
  • python实现二维数组顺/逆时针打印

    千次阅读 2020-08-28 10:04:29
    python实现二维数组顺/逆时针打印 需求 对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。话不多说,直接上思路和代码! 思路和关键算法 这个问题不熟悉矩阵的同学可能会想着定义各个方向...
  • python 实现 矩阵逆时针旋转

    千次阅读 2013-10-22 10:19:24
    如果矩阵是一个深度为4,三次嵌套的矩阵,其中最小列向量包涵4个数值,三个空间坐标值,X,Y,Z, 外加一个时间 T 值,通过矩阵的方式来表示四维空间,是不是更有表现力和依据感呢??? 记得当年学习相对论时...
  • [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....
  • 顺时针打印矩阵 剑指 Offer 29. 顺时针打印矩阵 ...然后将剩下元素逆时针旋转 90 度,再依次循环进行。 逆时针:竖排提取 → 元素翻转 。 def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
  • #二维数组逆时针旋转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顺时针打印矩阵

    2021-07-07 21:29:34
    思路:顺时针打印数组就是通过索引遍历数组,但由于是顺时针遍历,索引变化多,没有办法仅仅根据索引达到顺时针输出的目的,所以应该想到,怎么样变换矩阵,利用常规遍历输出矩阵,顺时针输出需要逆时针旋转矩阵,...
  • #顺时针打印 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 =...
  • 今日学习在线编程题:逆时针旋转矩阵
  • 思路:逆时针旋转矩阵打印完一行删除一行,直到打印结束 class Solution(object): def printMatrix(self, matrix): # 打印矩阵 result = [] while matrix: result += matrix.pop(0) if matrix: ...
  • 矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度第一版 现主要实现不使用额外空间完成矩阵元素逆时针旋转90度。 给出一个矩阵,得到他的转置矩阵,输入以及要求输出如下: e.g.0.1 示例1 3*3矩阵 Inpu...
  • 今天刷《剑指offer》的时候碰到这样一道题: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 ...最主要的在于实现矩阵逆时针操作。关于矩阵的旋转有好
  • } } 样例输入: 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) 系列目录:矩阵操作试题(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...
  • 偶然发现xxx中的一道通过率很低的题,本想小试身手,奈何经过了一天的奋战,终于把这道题的...输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10...
  • # -*- coding:utf-8 -*-class Solution:# matrix类型为二维列表,需要返回列表def printMatrix(self, matrix):# write code here#先取矩阵的第一行,接着将剩下作为新矩阵进行一个逆时针90度的翻转,接着获取第一行...
  • a = [[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): .

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,426
精华内容 970
关键字:

python逆时针打印矩阵