面试经典算法题(1)
题目:输入一个矩阵,按照从外到里以顺时针的顺序依次
打印出每个数字,例如输入下面的矩阵:
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
分析:我的思路是像洋葱一样从外往内一圈层一圈层拨,如下草图:
package javaoffer;
import java.util.Scanner;
/*题目:输入一个矩阵,按照从外到里以顺时针的顺序依次
* 打印出每个数字,例如输入下面的矩阵:
* 1 2 3 4
* 5 6 7 8
* 9 10 11 12
* 13 14 15 16
* 则依次打印出数字1,2,3,4,8,12,16,15,。。。,10 */
public class Demo01 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入行r和列l:");
int r = s.nextInt();
int l = s.nextInt();
System.out.println("请输入矩阵元素:");
int[][] arr = new int[r][l]; //{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
for (int i = 0; i < r; i++) {
for (int j = 0; j < l; j++) {
arr[i][j] = s.nextInt();
}
}
for (int w = 0; w < arr.length / 2; w++) {
//第一排正常打印输出
for (int i = w; i < w + 1; i++) {
for (int j = w; j < arr[i].length - w; j++) {
System.out.print(arr[i][j] + ",");
}
}
//打印右边上的
for (int i = w + 1; i < arr.length - (w + 1); i++) {
System.out.print(arr[i][arr[i].length - (w + 1)] + ",");
}
//底下往回打
for (int i = arr[arr.length - (w + 1)].length - (w + 1); i >= w; i--) {
System.out.print(arr[arr.length - (w + 1)][i] + ",");
}
//打印左半边上的
for (int i = arr.length - 1 - (w + 1), j = 0; i > w; i--) {
System.out.print(arr[i][j] + ",");
}
}
}
}