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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值