Leetcode #54. Spiral Matrix 螺旋遍历 解题报告

1 解题思想

这道题是一个趣味遍历矩阵的题。
题目要求以螺旋的方式遍历一个m*n的二维数组,按照这个顺去遍历输出。所谓的螺旋,就是从0,0开始顺时针的,一圈一圈的遍历,从外到里。

这道题的基本解题思想就是设置四个边界,对应上下左右,按照这个边界,每次一次性的把这行或列遍历就可以了

2 原题

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 ]
]
You should return [1,2,3,6,9,8,7,4,5].

3 AC解

public class Solution {
    /**
     * 分四个方向去做,分别设置一个上下界,每次遍历时不要超过上下界就好了
     * */
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list=new ArrayList<Integer>();
        if(matrix.length==0)
            return list;
        int m=matrix.length-1,n=matrix[0].length-1;
        int mstart=0,nstart=0,i;
        //System.out.println(mstart+" "+m+"  "+nstart+" "+n);
        while(mstart<=m && nstart<=n){
            for( i=nstart;i<=n;i++)
                list.add(matrix[mstart][i]);
            mstart++;
            for( i=mstart;i<=m;i++)
                list.add(matrix[i][n]);
            n--;
            for( i=n;i>=nstart && m>=mstart;i--)
                list.add(matrix[m][i]);
            m--;
            for( i=m;i>=mstart && n>=nstart;i--)
                list.add(matrix[i][nstart]);
            nstart++;
        }
        return list;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值