剑指offer 顺时针打印矩阵

题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

思路 按层来模拟矩阵
1 设左上角元素为(r1,c1),右下角为(r2,c2)。
2 首先遍历(r1,col) col取值范围是是c1~c2;
3 再遍历(row,c2) row取值范围是是r1+1~r2;
4 再遍历(r2,col) col取值范围是是c2-1~c1; 此时要加入r1!=r2 防止出现矩阵只有一行的情况。
5 再遍历(row,c1) row取值范围是是r2-1~r1; 此时要加入c1!=c2 防止出现矩阵只有一列的情况。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> ans=new ArrayList();
        int c1=0,r1=0,c2=matrix[0].length-1,r2=matrix.length-1;
        while(c1<=c2&&r1<=r2)
        {
            for(int col=c1;col<=c2;col++)
                ans.add(matrix[r1][col]);
            for(int row=r1+1;row<=r2;row++)
                ans.add(matrix[row][c2]);
            for(int col=c2-1;col>=c1&&r1!=r2;col--)//防止出现单行
                ans.add(matrix[r2][col]);
            for(int row=r2-1;row>r1&&c1!=c2;row--)//防止出现单列
                ans.add(matrix[row][c1]);
            c1++;
            c2--;
            r1++;
            r2--;   
        }
        return ans;
    }
}

其他的题题解
剑指offer题解 java版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值