顺时针打印矩阵-剑指Offer-Java

顺时针打印矩阵:顺时针环状打印矩阵

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

剑指offer:

  1. import java.util.ArrayList;
  2. public class Solution {
  3.  public ArrayList<Integer> printMatrix(int [][] matrix) {
  4.         int lr = 0;
  5.         int lc = 0;
  6.         int rr = matrix.length - 1;
  7.         int rc = matrix[0].length - 1;
  8.         ArrayList<Integer> list = new ArrayList();
  9.         // 处理当前左上角和右下角形成一圈情况 处理完后 左上角向下 右下角向上 继续处理下一圈
  10.         while(lr <= rr && lc <= rc) {
  11.             whirl(matrix, lr++, lc++, rr--, rc--, list);    
  12.         }
  13.         return list;
  14.     }
  15.     // 打印左上角和右下角形成一圈的情况
  16.     private void whirl(int[][] array, int lr, int lc, int rr, int rc, ArrayList<Integer> list) {
  17.         // 只有一行
  18.         if(lr == rr) {
  19.             for(int i = lc; i <= rc; i++) {
  20.                 list.add(array[lr][i]);
  21.             }
  22.             return;
  23.         }
  24.         // 只有一列
  25.         if(lc == rc) {
  26.             for(int i = lr; i <= rr; i++) {
  27.                 list.add(array[i][lc]);
  28.             }
  29.             return;
  30.         }
  31.         // 常规情况
  32.         // 打印第一行
  33.         for(int i = lc; i <= rc; i++) {
  34.             list.add(array[lr][i]);
  35.         }
  36.         // 打印最后一列
  37.         for(int i = lr + 1; i <= rr; i++) {
  38.             list.add(array[i][rc]);
  39.         }
  40.         // 打印最后一行
  41.         for(int i = rc - 1; i >= lc ; i--) {
  42.             list.add(array[rr][i]);
  43.         }
  44.         // 打印第一列
  45.         for(int i = rr -1; i >= lr + 1; i--) {
  46.             list.add(array[i][lc]);
  47.         }
  48.     }
  49. }

本地测试:

  1. package pratice618;
  2. import java.util.ArrayList;
  3. public class printMatrix29_710 {
  4.     public static ArrayList<Integer> printMatrix(int arr[][]){
  5.         int row = arr.length-1, cols=arr[0].length-1;
  6.         ArrayList<Integer> result= new ArrayList<Integer>();
  7.         if(row==0 || cols==0) return null;
  8.         int r1=0, c1=0;
  9.         while(r1<=row && c1<=cols){
  10. //最上面从左向右打印
  11.             for(int i=c1;i<=cols;i++)  
  12.                 result.add(arr[r1][i]);
  13. //最右边一列从上到下打印
  14.             for(int i=r1+1;i<=row;i++)
  15.                 result.add(arr[i][cols]);
  16. //最底部从右向左打印
  17.             if(r1 != row)
  18.                 for(int i=cols-1;i>=c1;i--)
  19.                     result.add(arr[row][i]);
  20.             if(c1 != cols)
  21. //最左边从下向上打印
  22.                 for(int i=row-1;i>r1;i--)
  23.                     result.add(arr[i][c1]);
  24.             r1++; c1++; row--; cols--;
  25.         }
  26.         return result;
  27.     }
  28.     public static void main(String[] args) {
  29.         int arr[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
  30.         System.out.print(" 结果:"+ arr.length);
  31.         System.out.print(" 结果:"+ arr[0].length);
  32.         System.out.println(" ");
  33.         ArrayList<Integer> result = printMatrix(arr);
  34.         for(int i=0;i<result.size();i++)
  35.             System.out.print(result.get(i)+" ");
  36.     }
  37. }

扫码关注一起随时随地学习!!!就在洋葱攻城狮,更多精彩,等你来!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱ycy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值