顺时针打印矩阵:顺时针环状打印矩阵
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:
- import java.util.ArrayList;
- public class Solution {
- public ArrayList<Integer> printMatrix(int [][] matrix) {
- int lr = 0;
- int lc = 0;
- int rr = matrix.length - 1;
- int rc = matrix[0].length - 1;
- ArrayList<Integer> list = new ArrayList();
- // 处理当前左上角和右下角形成一圈情况 处理完后 左上角向下 右下角向上 继续处理下一圈
- while(lr <= rr && lc <= rc) {
- whirl(matrix, lr++, lc++, rr--, rc--, list);
- }
- return list;
- }
- // 打印左上角和右下角形成一圈的情况
- private void whirl(int[][] array, int lr, int lc, int rr, int rc, ArrayList<Integer> list) {
- // 只有一行
- if(lr == rr) {
- for(int i = lc; i <= rc; i++) {
- list.add(array[lr][i]);
- }
- return;
- }
- // 只有一列
- if(lc == rc) {
- for(int i = lr; i <= rr; i++) {
- list.add(array[i][lc]);
- }
- return;
- }
- // 常规情况
- // 打印第一行
- for(int i = lc; i <= rc; i++) {
- list.add(array[lr][i]);
- }
- // 打印最后一列
- for(int i = lr + 1; i <= rr; i++) {
- list.add(array[i][rc]);
- }
- // 打印最后一行
- for(int i = rc - 1; i >= lc ; i--) {
- list.add(array[rr][i]);
- }
- // 打印第一列
- for(int i = rr -1; i >= lr + 1; i--) {
- list.add(array[i][lc]);
- }
- }
- }
本地测试:
- package pratice618;
- import java.util.ArrayList;
- public class printMatrix29_710 {
- public static ArrayList<Integer> printMatrix(int arr[][]){
- int row = arr.length-1, cols=arr[0].length-1;
- ArrayList<Integer> result= new ArrayList<Integer>();
- if(row==0 || cols==0) return null;
- int r1=0, c1=0;
- while(r1<=row && c1<=cols){
- //最上面从左向右打印
- for(int i=c1;i<=cols;i++)
- result.add(arr[r1][i]);
- //最右边一列从上到下打印
- for(int i=r1+1;i<=row;i++)
- result.add(arr[i][cols]);
- //最底部从右向左打印
- if(r1 != row)
- for(int i=cols-1;i>=c1;i--)
- result.add(arr[row][i]);
- if(c1 != cols)
- //最左边从下向上打印
- for(int i=row-1;i>r1;i--)
- result.add(arr[i][c1]);
- r1++; c1++; row--; cols--;
- }
- return result;
- }
- public static void main(String[] args) {
- int arr[][] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
- System.out.print(" 结果:"+ arr.length);
- System.out.print(" 结果:"+ arr[0].length);
- System.out.println(" ");
- ArrayList<Integer> result = printMatrix(arr);
- for(int i=0;i<result.size();i++)
- System.out.print(result.get(i)+" ");
- }
- }
扫码关注一起随时随地学习!!!就在洋葱攻城狮,更多精彩,等你来!!