leetcode-面试题29.顺时针打印矩阵-矩阵消除法

思路

  延续上题的矩阵消除法的思路,从外向里访问矩阵元素时,始终是在当前矩阵的最上方从左到右——>最右列从上到下——>最下方从右到左——>最左列从下到上访问。

  • 遍历结束的条件是每个元素均被访问到,即返回的含有m*n个元素的一维数组被填满。
  • 时间复杂度O(mn)
代码
public int[] spiralOrder(int[][] matrix) {
		if(matrix==null || matrix.length==0 || matrix[0].length==0) {
			//return null ;
			return new int[0];  //测试用例[],输出[]
		}
		int rowlength = matrix.length; //行长度
		int colength = matrix[0].length;  //列长度
		int printLength = rowlength * colength;
		int[] printMatrix = new int[printLength];
		int n=0;
		int left=0, right=colength-1, top=0, bottom=rowlength-1;
		while(n<printLength) {
			// top:left->right
			for(int i=left;i<=right && n<printLength;i++) {
				printMatrix[n]=matrix[top][i];
				n++;
			}
			top++;
			// right: top->bottom
			for(int i=top;i<=bottom && n<printLength;i++) {
				printMatrix[n] = matrix[i][right];
				n++;
			}
			right--;
			// bottom: right->left
			for(int i=right;i>=left && n<printLength;i--) {
				printMatrix[n] = matrix[bottom][i];
				n++;
			}
			bottom--;
			// left: bottom->top
			for(int i=bottom;i>=top && n<printLength;i--) {
				printMatrix[n] = matrix[i][left];
				n++;
			}
			left++;
		}
		return printMatrix;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值