54.螺旋读取数组

来源:互联网 发布:element linux 编辑:程序博客网 时间:2024/06/17 06:09

Spiral Matrix

问题描述:

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]

知识补充:

zip函数

a = [1,2,3]b = [4,5,6]ab = zip(a,b)>>>[(1,4),(2,5),(3,6)]//生成这样的元组zip(*ab)>>>[[1,2,3],[4,5,6]]//相当于变回原样

数组逆序

a = [[1,2,3],[4,5,6]]a[::-1]>>>[[4,5,6],[1,2,3]//相当于把数组按逆序重组

测试代码(c++):

class Solution {public:    vector<int> spiralOrder(vector<vector<int>>& matrix) {        if (matrix.empty()) return {};        vector<int> result;        int right=matrix[0].size()-1,left=0,up=0,down=matrix.size()-1;        while(true)        {            for(int i=left;i<=right;i++)            {                result.push_back(matrix[up][i]);            }            if(up==down)                break;            up++;            for(int i=up;i<=down;i++)            {                result.push_back(matrix[i][right]);            }            if(right==left)                break;            right--;            for(int i=right;i>=left;i--)            {                result.push_back(matrix[down][i]);            }            if(up==down)                break;            down--;              for(int i=down;i>=up;i--)            {                result.push_back(matrix[i][left]);            }            if(right==left)                break;            left++;                  }        return result;    }};

性能:

这里写图片描述

参考答案(python):

return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1])

性能:

这里写图片描述

原创粉丝点击