当前位置: 代码迷 >> 综合 >> 顺时针打印矩阵(直接算法)
  详细解决方案

顺时针打印矩阵(直接算法)

热度:68   发布时间:2023-09-28 03:49:58.0

这是一道很经典的题目(顺时针打印矩阵),每次做这道题就让我想起来当初大一的时候刚学c语言那会儿,那时候对编程无比痴迷,每次写代码都写很久,现在感觉已经失去了那份痴迷很久了。

那下面步入正题吧!!!顺时针打印矩阵,其实这和我们玩过的一种游戏很相似--------贪食蛇,特别是以前的诺基亚手机那会,如下一个矩阵:

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]

我看网上有些人的算法很奇怪(也有可能是我太愚钝理解不了),他们居然想的是总结出该矩阵圈数的规律,按照圈数来循环打印,我的思路很直接,题目要求不是让我们按照顺时针来打印吗?我们可以把这个矩阵想象成贪食蛇的活动区域(也可以说是诺基亚的手机屏幕框框),怎么控制贪食蛇让它顺时针依次铺满整个屏幕。

下面是我的代码:

import java.util.ArrayList;
/*** 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,* 例如,如果输入如下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.*/
public class 顺时针打印矩阵 {int count=0;public ArrayList<Integer> printMatrix(int [][] matrix) {ArrayList<Integer> list = new ArrayList<>();   //要打印的序列列表int flag = 0;   //方向标志int i =0,j = 0; //矩阵坐标int top = 1;    //距离上边框距离int bottom = matrix.length-1; //距离下边框距离int left = 0;                 //距离左边框距离int right = matrix[1].length-1; //距离右边框距离list.add(matrix[0][0]);while (list.size()!=(matrix[0].length*matrix.length)){if (flag==0){j++;if (j<=right){list.add(matrix[i][j]);}else {flag=1;j=right;right--;}}if (flag==1){i++;if (i<=bottom){list.add(matrix[i][j]);}else {flag=2;i = bottom;bottom--;}}if (flag==2){j--;if (j>=left){list.add(matrix[i][j]);}else{flag =3;j = left;left++;}}if (flag==3){i--;if (i>=top){list.add(matrix[i][j]);}else {flag =0;i = top;top++;}}}return list;}public static void main(String[] args) {顺时针打印矩阵 s = new 顺时针打印矩阵();int[][] m = {
   {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
//        int[][] m = {
   {1},{2},{3},{4}};System.out.println(s.printMatrix(m).toString());
//        System.out.println(s.count);}
}
  相关解决方案