spiral-matrix(螺旋矩阵)

题目

给定m×n个元素(m行,n列)的矩阵,以螺旋顺序返回矩阵的所有元素。

例如,
鉴于以下矩阵:

[
  [1,2,3],
  [4,5,6],
  [7,8,9]
]
你应该返回[1,2,3,6,9,8,7,4,5]。

代码实现

代码1:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> result=new ArrayList<>();
        if(matrix==null || matrix.length==0 || matrix[0].length==0) return result;
        int m=matrix.length;
        int n=matrix[0].length;
        int [][] flag=new int [m][n];
        int l2r=0,u2d=n-1,r2l=m-1,d2u=0;
        int count=0;
        while(count<m*n){
            for(int i=0;i<n;i++){//从左往右
                if(flag[l2r][i]==0){
                    result.add(matrix[l2r][i]);
                    count++;
                    flag[l2r][i]=1;
                }
            }
            l2r++;
            for(int i=0;i<m;i++){//从上往下
                if(flag[i][u2d]==0){
                    result.add(matrix[i][u2d]);
                    count++;
                    flag[i][u2d]=1;
                }
            }
            u2d--;
            for(int i=n-1;i>=0;i--){//从右往左
                if(flag[r2l][i]==0){
                    result.add(matrix[r2l][i]);
                    count++;
                    flag[r2l][i]=1;
                }
            }
            r2l--;
            for(int i=m-1;i>=0;i--){//从下往上
                if(flag[i][d2u]==0){
                    result.add(matrix[i][d2u]);
                    count++;
                    flag[i][d2u]=1;
                }
            }
            d2u++;
        }
        return result;
    }
}

代码2:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> result=new ArrayList<>();
        if(matrix==null || matrix.length==0 || matrix[0].length==0) return result;
        int m=matrix.length;
        int n=matrix[0].length;
        int l2r=0,u2d=n-1,r2l=m-1,d2u=0;
        int count=0;
        while(count<m*n){
            for(int i=d2u;i<=u2d;i++){//从左往右
                result.add(matrix[l2r][i]);
                count++;
            }
            if(count>=m*n) break;
            l2r++;
            for(int i=l2r;i<=r2l;i++){//从上往下
                result.add(matrix[i][u2d]);
                count++;
            }
            if(count>=m*n) break;
            u2d--;
            for(int i=u2d;i>=d2u;i--){//从右往左
                result.add(matrix[r2l][i]);
                count++;
            }
            if(count>=m*n) break;
            r2l--;
            for(int i=r2l;i>=l2r;i--){//从下往上
                result.add(matrix[i][d2u]);
                count++;
            }
            if(count>=m*n) break;
            d2u++;
        }
        return result;
    }
}

题目来自牛客网leetcode

猜你喜欢

转载自blog.csdn.net/everyfriday_shujk/article/details/80209929