剑指offer(19)顺时针打印出矩阵的元素

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

思路:首先将只有一行,只有一列的边界情况列举出来。然后设定左上角的行值startRow和列值startCol,右下角的行值endRow和列值endCo,每次读第一行,最后一列,最后一行,第一列。

代码:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if(matrix == null ||matrix.length ==0)
            return result;
        printMatrixmethod(matrix,0,0,matrix.length - 1,matrix[0].length - 1,result);
        return result;
    }
    
    public void printMatrixmethod(int [][] matrix, int startRow, int startCol, int endRow, int endCol, ArrayList<Integer> result){
        if(startRow < endRow && startCol < endCol){
            for(int j = startCol; j <= endCol;j++)
                result.add(matrix[startRow][j]);
            for(int i = startRow + 1; i <= endRow - 1 ;i++)
                result.add(matrix[i][endCol]);
            for(int j = endCol;j >= startCol;j--)
                result.add(matrix[endRow][j]);
            for(int i = endRow - 1; i >= startRow + 1; i--)
                result.add(matrix[i][startCol]);
            printMatrixmethod(matrix,startRow + 1, startCol + 1,endRow - 1,endCol - 1, result);
        }else if(startRow == endRow && startCol < endCol ){
            for(int j = startCol; j <= endCol ; j++){
            result.add(matrix[startRow][j]);
            }
        }else if(startRow < endRow && startCol == endCol){
            for(int i = startRow; i <= endRow; i++)
                result.add(matrix[i][startCol]);
        }else if(startRow == endRow && startCol == endCol){
            result.add(matrix[startRow][startCol]);
        }
        else
            return;
    }
}

l

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值