剑指offer (19)

题目 : 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路 :
用旋转魔法的方式,一直取出第一行;
例如
1 2 3
4 5 6
7 8 9

输出并删除第一行后,变为
4 5 6
7 8 9

再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
继续重复上述操作即可。

	public static ArrayList<Integer> printMatrix(int[][] matrix) {
		ArrayList<Integer> list = new ArrayList<>();
		for (int a : matrix[0]) {
			list.add(a);
		}
		reverseaArray(matrix, matrix.length-1, matrix[0].length, list);
		return list;
	}
	// 旋转数组
	public static int[][] reverseaArray(int[][] array, int row, int cln, ArrayList<Integer> list) {
		int temp[][] = new int[cln][row];
		if (cln > 0) {
			for (int i = 1; i < array.length; i++) {
				for (int j = 0; j < array[i].length; j++) {
					temp[array[i].length - j - 1][i - 1] = array[i][j];
				}
			}
			for (int a : temp[0]) {
				list.add(a);
			}
			return reverseaArray(temp, temp.length - 1, temp[0].length, list);
		}
		return null;
	}
发布了50 篇原创文章 · 获赞 0 · 访问量 408

猜你喜欢

转载自blog.csdn.net/weixin_46108108/article/details/104198856
今日推荐