顺时针打印矩阵,间隔逗号输出——python实现

题目输入一个矩阵(行列相等的二维矩阵),按照从外向里以顺时针的顺序依次打印出每一个数字,以逗号隔开。

输入描述:二维数组对应字符串.[[1,2,3],[4,5,6],[7,8,9]]

输出描述:二维数组对应的一组数字.1,2,3,6,9,8,7,4,5

思路:螺旋访问数组是常见的一类题目,还可以变形为螺旋生成n维数组。这类题目思路都是相同的,主要是控制访问每行每列的边界。 
  考虑:用两个变量xnum,ynum分别对访问列方向、行方向上前进步数的限制。ynum初始值为列数, xnum初始值为行数-1。打印具体过程如下: 
  当行列方向可前进步数均不为0并且输出列表长度小于原矩阵元素个数时,循环以下四个方向: 
  →:行方向的打印,坐标y值步进,可前进步数为yum。 
  ↓:列方向的打印,坐标x值步进,可前进步数为xnum。 
  走过半圈之后,ynum和xnum都减1,这是很显然的。 
  ←:行方向的打印,坐标y值后退,为了保证与→ 方向数据不重合,需要加上xnum>=0的判断,这个判断的意思是上边界与下边界之间有间隔,因为如果此时只剩一行数据,那么意味着列方向可前进步数为0,即上一步的xnum = 0 - 1 = -1 
  ↑:行方向的打印,坐标x值后退,为了保证与↓ 方向数据不重合,需要加上ynum>=0的判断,这个判断的意思是左边界与右边界之间有间隔,同上

实现代码一

# _*_ encoding:utf-8 _*_
import numpy as np
import pandas as pd
from numpy import *
def rotate(array):
    temp = np.zeros_like(array.transpose()) #np.zeros_like构建一个与原矩阵维度一样的新矩阵,array.transpose()矩阵转置
    for j in range(len(array)):   #len(matrix)  #矩阵行数
        for i in range(len(array[0])):   # len(matrix[0])   #矩阵列数
            temp[i][j] = array[j][len(array[0])-i-1]    #行列对换
    return temp
if __name__ =='__main__':
    input = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
    b = rotate(input)
    output =b.flatten()
    print(input,)
    print(",".join(str(result) for result in output))  #以逗号间隔输出

输出结果:

代码实现二

# _*_ encoding:utf-8 _*_
import numpy as np
import pandas as pd
from numpy import *
class Solution(object):
  def printMatrix(self, matrix):
        result = []   # 打印矩阵
        while matrix:
            result += matrix.pop(0)   #移除矩阵中的第一个元素,并返回被移除的元素的值,也就是说返回的是矩阵第一个元素。
            if matrix:
                matrix = self.turn(matrix)
        return result
  def turn(self, matrix):   # 逆时针旋转矩阵
        row = len(matrix)  #矩阵行数
        col = len(matrix[0])   #矩阵列数       
        new_matrix = []    # 存放旋转后的矩阵        
        for i in range(col):    # 行列调换
            new_line = []
            for j in range(row):
                new_line.append(matrix[j][col-1-i])
            new_matrix.append(new_line)
        return new_matrix
if __name__ == '__main__':
    # 测试代码
    matrix = [
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12],
        [13, 14, 15, 16]
    ]
    solution = Solution()   #调用class Solution
    result = solution.printMatrix(matrix)
    print(result)

输出结果:

猜你喜欢

转载自blog.csdn.net/zqzq19950725/article/details/88410219