• 剑指offer系列17---顺时针打印矩阵(不是很懂)


     1 package com.exe4.offer;
     2 
     3 import java.util.ArrayList;
     4 /**
     5  * 17【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
     6  * 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
     7  * @author WGS
     8  *
     9  */
    10 public class PrintArraysInCircle {
    11 
    12     public ArrayList<Integer> printArraysClock(int[][] arrs){
    13          int rows=arrs.length;
    14          int columns=arrs[0].length;
    15         if(arrs==null || rows<=0 || columns<=0)
    16             return null;
    17         
    18          ArrayList<Integer> list=new ArrayList<Integer>();
    19          //起点坐标
    20          int count=0;
    21          while(columns>count*2 && rows>count*2){
    22              printArraysInCircle(list,arrs,columns,rows,count);
    23              count++;
    24          }
    25          return list;
    26     }
    27     
    28     
    29         
    30     public void printArraysInCircle(ArrayList<Integer> list,int[][] arrs,int columns,int rows,int count) {
    31         int endX=columns-1-count;
    32         int endY=rows-1-count;
    33         int number=0;
    34         
    35         //从左到右打印》》》》》》
    36         for(int i=count;i<=endX;i++){
    37             list.add(arrs[count][i]);
    38         }
    39         //从上到下打印
    40         if(count<endX){
    41             for(int i=count+1;i<=endY;i++){
    42                 list.add(arrs[i][endX]);
    43             }
    44         }
    45         //从右到左
    46         if(count<endX && count<endY){
    47             for(int i=endX-1;i>=count;i--){
    48                 list.add(arrs[endY][i]);
    49             }
    50         }
    51         //从下到上
    52         if(count<endX && count<endY-1){
    53             for(int i=endY-1;i>=count+1;i--){
    54                 list.add(arrs[i][count]);
    55             }
    56         }
    57         
    58     }
    59 
    60 
    61 
    62     public static void main(String[] args) {
    63         // TODO Auto-generated method stub
    64              int[][] arrs = new int[4][4];
    65              arrs[0] = new int[]{1,2,3,4};
    66              arrs[1] = new int[]{5,6,7,8};
    67              arrs[2] = new int[]{9,10,11,12};
    68              arrs[3] = new int[]{13,14,15,16};
    69            // matrix[4] = new int[]{17,18,19,20};
    70             
    71             PrintArraysInCircle p = new PrintArraysInCircle();
    72             ArrayList<Integer> list = p.printArraysClock(arrs);
    73             for (Integer integer : list) {
    74                 System.out.print(integer+" ");
    75             }
    76     }
    77 
    78 }
  • 相关阅读:
    .Net里的Attribute 学习
    浅谈并发与并行(一)
    Asp.net Mvc4默认权限详细(下)
    Enum是如何用的?
    指针与引用
    栈与队列
    mini2440裸机之I2C
    解决Delphi MDI 闪烁问题(使用WM_SETREDRAW锁屏后进行处理)
    DelphiXE 显示GIF动画
    参数传递方法(Delphi1.0与win16API使用pascal方法,即从左到右)
  • 原文地址:https://www.cnblogs.com/noaman/p/5436641.html
Copyright © 2020-2023  润新知