小渣渣的算法学习笔记:2018秋招备战
数据结构类算法总结:序列
数据结构类算法总结:序列
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.
2.代码实现:
public class Solution29 { public static void main(String[] args) { Solution29 s = new Solution29(); int [][] arr = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; s.printMatrixClockwisely(arr,4,4); } public void printMatrixClockwisely(int [][]arr,int columns,int rows){ if(arr == null || columns <=0 || rows <= 0) return; int start = 0; while(columns>start*2 && rows>start*2){ printMatrixInCircle(arr,columns,rows,start); ++start; } } public void printMatrixInCircle(int [][]arr,int columns,int rows,int start){ int endX = columns -1-start; int endY = rows -1-start; //从左到右打印一行 for(int i = start;i<= endX;++i){ int number = arr[start][i]; System.out.print(number+" "); } //从上到下打印一行 if(start<endY){ for(int i=start+1;i<=endY;++i){ int number = arr[i][endX]; System.out.print(number+" "); } } //从右到左打印一行 if(start<endX&&start<endY){ for(int i=endX-1;i>=start;--i){ int number = arr[endY][i]; System.out.print(number+" "); } } //从下到上打印一行 if(start<endX&&start<endY-1){ for(int i=endY-1;i>=start+1;--i){ int number = arr[i][start]; System.out.print(number+" "); } } } }