顺时针打印数组

import java.util.ArrayList;
public class Solution {
    public void print(int [][] matrix,int rows,int cols,int k, ArrayList<Integer> arr) {                    
            int endX = cols-1-k;
            int endY = rows-1-k;

            for(int j=k;j<=endX;j++)
                arr.add(matrix[k][j]);
            for(int j=k+1;j<=endY;j++)
                arr.add(matrix[j][endX]);
            if(k < endX && k < endY){//eg:一行或者一列
                for(int j=endX-1;j>=k;j--)
                    arr.add(matrix[endY][j]);     
            }
            if(k < endX && k < endY-1){
                for(int j=endY-1;j>k;j--)
                    arr.add(matrix[j][k]);    
            }                        
     }
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> arr = new ArrayList();
        int rows = matrix.length;
        int cols = matrix[0].length;
        if(rows == 1 && cols == 1){
            arr.add(matrix[0][0]);
            return arr;
        }
        int i = 0,j = 0;
        int k = 0;                       
        while(k * 2 < (Math.min(rows,cols))){
            print(matrix,rows,cols,k,arr);
            k++;          
        }
        return arr;
    }
}

能用乘法的用乘法,尽量不用除法!
print()函数中有两个难点:
(1)上下左右的交界点,容易被重复打印;
(2)终止行号和列号与k的关系
等以后再回复一遍吧

参考:
https://blog.csdn.net/qq_33724710/article/details/51392553
https://blog.csdn.net/lilianforever/article/details/51848885

猜你喜欢

转载自blog.csdn.net/xuchonghao/article/details/80145981
今日推荐