模拟 01

65 阅读1分钟

面试题29. 顺时针打印矩阵

原题链接

本题同原站
leetcode-cn.com/problems/sp…一样

代码如下

import java.util.Arrays;

/**
 * 模拟
 * 
 * l	top
 * 
 * 
 * b	 r
 * 
 * Code by java
 */

class Solution {
	public int[] spiralOrder(int[][] matrix) {
		if (matrix.length == 0) {
			return new int[0];
		}
		int l = 0, r = matrix[0].length - 1;
		int top = 0, b = matrix.length - 1;
		int[] ans = new int[(r + 1) * (b + 1)];
		int x = 0;				//用于维护结果数组
		
		while(true) {
			for(int i = l; i <= r; i++) {
				ans[x++] = matrix[top][i];	//左上 到 右上
			}
			if(++top > b) break;
			
			for(int i = top; i <= b; i++) {
				ans[x++] = matrix[i][r];	//右上 到 右下
			}
			if(--r < l) break;
			
			for(int i = r; i >= l; i--) {
				ans[x++] = matrix[b][i];	//右下 到 左下
			}
			if(--b < top) break;
			
			for(int i = b; i >= top; i--) {
				ans[x++] = matrix[i][l];	//左下 到 左上
			}
			if(++l > r) break;
		}
		return ans;
	}
//
//	public static void main(String[] args) {
//		Solution a = new Solution();
//		int[][] p = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
//		System.out.println(Arrays.toString(a.spiralOrder(p)));
//	}
}