【剑指 Offer 学习】【面试题 20: 顺时针打印矩阵】【思路】

题目:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.

 

思路:

用左上和右下的坐标定位出一次要旋转打印的数据,一次旋转打印结束后,往对角分别前进和后退一个单位。

注意点:控制好后两个 for 循环,需要加入条件判断,防止出现单行或者单列的情况。从右往左打印时,当前值是大于或等于最左边界的。

 

代码:

package 顺时针打印矩阵;

import java.util.ArrayList;

public class Demo {

	public ArrayList<Integer> printMatrix(int[][] matrix) {
		ArrayList<Integer> result = new ArrayList<>();
		int row = matrix.length; 	// 行数
		int col = matrix[0].length; // 列数

		// 输入的二维数组非法,返回空的数组
		if (row == 0 || col == 0) {
			return result;
		}

		// 定义四个关键变量,标识坐上和右下的打印范围
		int left = 0;
		int right = col - 1;
		int top = 0;
		int bottom = row - 1;
		while (left <= right && top <= bottom) {
			// 从左往右
			for (int i = left; i <= right; i++) {
				result.add(matrix[top][i]);
				System.out.print(matrix[top][i] + " ");
			}
			// 从上往下
			for (int i = top + 1; i <= bottom; i++) {
				result.add(matrix[i][right]);
				System.out.print(matrix[i][right] + " ");
			}
			// 从右往左
			for (int i = right - 1; i >= left && top < bottom; --i) {
				result.add(matrix[bottom][i]);
				System.out.print(matrix[bottom][i] + " ");
			}
			// 从下往上
			for (int i = bottom - 1; i > top && right > left; --i) {
				result.add(matrix[i][left]);
				System.out.print(matrix[i][left] + " ");
			}
			++top;
			++left;
			--right;
			--bottom;
		}
		return result;
	}

	public static void main(String[] args) {
		Demo demo = new Demo();
		
		int[][] numbers = {
                {1, 2, 3, 4, 5},
                {16, 17, 18, 19, 6},
                {15, 24, 25, 20, 7},
                {14, 23, 22, 21, 8},
                {13, 12, 11, 10, 9},
        };
		demo.printMatrix(numbers);
		System.out.println();
		
		int[][] numbers2 = {
                {1, 2, 3, 4, 5, 6, 7, 8},
                {22, 23, 24, 25, 26, 27, 28, 9},
                {21, 36, 37, 38, 39, 40, 29, 10},
                {20, 35, 34, 33, 32, 31, 30, 11},
                {19, 18, 17, 16, 15, 14, 13, 12},
	    };
		demo.printMatrix(numbers2);
		System.out.println();
		
		int[][] numbers3 = {
                {1, 2, 3, 4, 5, 6, 7, 8}
        };
		demo.printMatrix(numbers3);
		System.out.println();
		
		int[][] numbers4 = {
                {1, 2, 3, 4, 5, 6, 7, 8},
                {16, 15, 14, 13, 12, 11, 10, 9}
        };
		demo.printMatrix(numbers4);
		System.out.println();
		
		int[][] numbers5 = {
                {1},
                {2},
                {3},
                {4},
                {5},
                {6},
                {7},
                {8}
        };
		demo.printMatrix(numbers5);
		System.out.println();
		
		int[][] numbers6 = {
                {1, 2},
                {4, 3}
        };
		demo.printMatrix(numbers6);
		System.out.println();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36847713/article/details/86098351