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

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

public class test{
	
    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<Integer>();
        if(matrix == null || matrix.length == 0){					//如果输入为空,则直接返回空结果
        	return result;
        }
        int maxRow = matrix.length-1;								//最大行数减1
        int maxCol = matrix[0].length-1;							//最大列数减1
        int minRow = 0;												//最小行数
        int minCol = 0;												//最小列数
        while(true){												//一直循环
        	for(int col = minCol;col<=maxCol;col++){				//从最小行开始遍历,行不变,列变
        		result.add(matrix[minRow][col]);
        	}
        	minRow++;												//最小行加1
        	if(minRow>maxRow){										//如果最小行大于最大行,则跳出循环
        		break;
        	}
        	for(int row = minRow;row<=maxRow;row++){				//从最大列列开始,行变,列不变
        		result.add(matrix[row][maxCol]);
        	}
        	maxCol--;												//最大列减1
        	if(minCol>maxCol){										//如果最小列大于最大列,则跳出循环
        		break;
        	}
        	for(int col = maxCol;col>=minCol;col--){				//从最大行开始,行不变,列变
        		result.add(matrix[maxRow][col]);
        	}
        	maxRow--;												//最大行减1
        	if(minRow>maxRow){										//如果最小行大于最大行,则跳出循环
        		break;
        	}
        	for(int row = maxRow;row>=minRow;row--){				//从最小列开始,行变,列不变
        		result.add(matrix[row][minCol]);
        	}
        	minCol++;												//最小列加1
        	if(minCol>maxCol){										//如果最小列大于最大列,则跳出循环
        		break;
        	}
        }
        return result;
    }
    
	public static void main(String[] args){
		int[][] nums = {
				{1,2,3},
				{4,5,6},
				{7,8,9}
				};
		List<Integer> result = spiralOrder(nums);
		System.out.println(result);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值