顺时针打印矩阵

计算层数,每层四个动作:左上到右上,右上到右下,右下到左下,左下到左上。

层数计算:矩阵中宽高最小值记为i,则层数为i/2+i%2。理解这个需要画图,按i为奇数和偶数考虑。为偶数,则每层需要所占空间都是两格,所以偶数直接除二就是层数。为奇数则还会剩一层(画个图就明白了),而这一层也会是一层,所以奇数还要加一。故有上式。

先用变量表示出矩阵宽高,界定别出错。还有就是打好补丁, 发现3*n(n>4)的矩阵时第二层明明只应该打一行从左上到右上,但实际又打了右下到左下。解决这个问题只需要在这个过程的for循环的判定条件上加上(height-1)/2!=j即可。

完整代码:

package exercise1;


import java.util.ArrayList;
public  class Solution {
    public static ArrayList<Integer> printMatrix(int [][] matrix) {
    ArrayList<Integer> result = new ArrayList();
    int width = matrix[0].length;
    int height = matrix.length;
    int i = Math.min(width, height)/2 + Math.min(width, height)%2;
    for(int j= 0;j < i;j++){
    for(int k = j;k < width-j;k++){
    result.add(matrix[j][k]);
    }
    for(int k = j + 1;k < height - j;k++){
    result.add(matrix[k][width-1-j]);
    }
    for(int k=width-j-2;(k>=j)&&(height-1)/2!=j;k--){
    result.add(matrix[height-j-1][k]);//右至左
    }
            for(int k=height-j-2;(k>j);k--){
            result.add(matrix[k][j]);//左下至左上
            }
    }
    return result;
       
    }
    public static void main(String[] args) {
int [][]arr={
{1,2,3,4},
{4,5,6,7},
{7,8,9,10},
};
ArrayList<Integer> result = printMatrix(arr);
for(int i = 0;i < result.size();i++){
System.out.println(result.get(i));
}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值