剑指Offer_编程题_顺时针打印矩阵

 

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
 

题目答案,思路

https://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a?f=discussion

 

链接:https://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a?f=discussion
来源:牛客网

可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作
例如 
1 2 3
4 5 6
7 8 9
输出并删除第一行后,再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
继续重复上述操作即可。
 
java 代码
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {

     ArrayList<Integer> al = new ArrayList<>();
            int row = matrix.length;
            while (row != 0) {
                for (int i = 0; i < matrix[0].length; i++) {
                    al.add(matrix[0][i]);
                }
                if (row == 1)
                    break;
                matrix = turn(matrix);
                row = matrix.length;
            }
            return al;
    }
    
     private int[][] turn(int[][] matrix) {
            // TODO 自动生成的方法存根
            int col = matrix[0].length;
            int row = matrix.length;
            int[][] newMatrix = new int[col][row - 1];
            for (int j = col - 1; j >= 0; j--) {
                for (int i = 1; i < row; i++) {
                    newMatrix[col - 1 - j][i - 1] = matrix[i][j];
                }
            }
            return newMatrix;
        }
}

 

 
 
Python代码如下
 
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        # write code here
        result = []
        while(matrix):
            result+=matrix.pop(0)
            if not matrix or not matrix[0]:
                break
            matrix = self.turn(matrix)
        return result
    def turn(self,matrix):
        num_r = len(matrix)
        num_c = len(matrix[0])
        newmat = []
        for i in range(num_c):
            newmat2 = []
            for j in range(num_r):
                newmat2.append(matrix[j][i])
            newmat.append(newmat2)
        newmat.reverse()
        return newmat

 

posted @ 2020-04-26 11:28  _Phoenix  阅读(189)  评论(0编辑  收藏  举报