LeetCode: Spiral Matrix螺旋矩阵

基本思路:
(1)模拟遍历过程
①从左往右matrix[rowstart][i]
②从上往下matrix[i][colend]
③从右往左matrix[rowend][i]
④从下往上matrix[i][colstart]
(2)判断结束条件;
(3)记得输入合法性判断(否则runtime错误)

import java.util.ArrayList;
import java.util.List;

/* 螺旋矩阵,m行n列,以螺旋的顺序返回矩阵的每一个元素
 * 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].
 * 解题思路:模拟遍历,
 * 首先,第0行,按列遍历,从小到大,到达最后一列
 * 然后,按行遍历,从小到大,到达最后一行,
 * 再按列遍历,从大到小
 * 最后按行遍历,从大到小
 * 直到满足退出条件
 */
public class Main {

    public static void main(String[] args){
        int[][] m = {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
        spiralOrder(m);
    }

    public static List<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(matrix == null || matrix.length == 0) return list;
        int rowstart = 0, rowend = matrix.length - 1;
        int colstart = 0, colend = matrix[0].length - 1;

        while(rowstart <= rowend && colstart <= colend){
            for(int i = colstart; i <= colend; i ++){
                list.add(matrix[rowstart][i]);
            }
            for(int i = rowstart + 1; i <= rowend; i ++){
                list.add(matrix[i][colend]);
            }
            if(rowstart != rowend){
                for(int i = colend - 1; i >=colstart; i--){
                    list.add(matrix[rowend][i]);
                }
            }
            if(colstart != colend){
                for(int i = rowend - 1; i >rowstart; i--){
                    list.add(matrix[i][colstart]);
                }
            }

            rowstart ++;
            rowend --;
            colstart ++;
            colend --;
        }

        System.out.println(list);
        return list;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值