[算法学习]顺时针打印矩阵

32 篇文章 0 订阅
29 篇文章 10 订阅

问题描述: 顺时针打印矩阵
例如:
{
{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列n,行n列1,行1列1。考虑到这几个后其实就不难了。


参考代码如下

/**
 * 顺时针打印矩阵
 *
 * @param matrix
 */
public static void clockwisePrintMatrix(int[][] matrix)
{
    // 1.test代码
    if (matrix == null)
    {
        System.err.println("输入矩阵有误");
        return;
    }
    int hight = matrix.length;
    if (hight == 0)
    {
        System.err.println("输入矩阵有误");
        return;
    }
    int width = matrix[0].length;
    for (int i = 1; i < hight; i++)
    {
        if (matrix[i].length != width)
        {
            System.err.println("输入矩阵有误");
            return;
        }
    }
    if (width == 0)
    {
        System.err.println("输入矩阵有误");
        return;
    }

    // 2.核心代码
    int loopNum = width > hight ? (hight + 1) / 2 : (width + 1) / 2;

    printMatrix(matrix, 0, 0, width, hight);
    for (int i = 1; i < loopNum; i++)
    {
        printMatrix(matrix, i, i, width - 2, hight - 2);
    }
    System.out.println();
}

/**
 * 顺时针打印一圈矩阵
 *
 * @param matrix
 * @param x
 * @param y
 * @param xLen
 * @param yLen
 */
private static void printMatrix(int[][] matrix, int x, int y, int xLen, int yLen)
{
    for (int i = 0; i < xLen; i++)
    {
        System.out.print(matrix[y][x + i] + ",");
    }
    for (int i = 1; i < yLen; i++)
    {
        System.out.print(matrix[y + i][x + xLen-1] + ",");
    }
    for (int i = 2; i <=xLen&&yLen!=1; i++)
    {
        System.out.print(matrix[y + yLen-1][x + xLen - i] + ",");
    }
    for (int i = 2; i <yLen&&xLen!=1; i++)
    {
        System.out.print(matrix[y + yLen - i][x] + ",");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值