书籍转圈打印矩阵(8)0604

题目

给定一个整型矩阵matrix,请按照转圈的方式打印它。

例如:

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

额外空间复杂度为O(1)

解答

这道题可以使用矩阵分圈处理法,这个方法适用与所有矩阵处理。

在矩阵中用左上角的坐标(tR,tC)和右下角的坐标(dR,dC)就可以表示一个子矩阵,比如,题目中的矩阵,当(tR,tC)=(0,0)、(dR,dC)=(3,3),表示的子矩阵就是整个矩阵,那么这个子矩阵最外层的部分如下:

1 2 3 4

5 8

9 12

13 14 15 16

如果能把这个子矩阵的外层转圈打印出来,那么在(tR,tC)=(0,0)、(dR,dC)=(3,3)时,打印的结果为:1,2,3,4,8,12,16,15,14,13,9,5。接下来令tR和tC加1,即(tR,tC)=(1,1),令dR和dC减1,(dR,dC)=(2,2),此时表示的子矩阵如下:

6 7

10 11

再把这个子矩阵转圈打印出来,结果为:6,7,11,10。把tR和tC加1,即(tR,tC)=(2,2),令dR和dC减1,即(dR,dC)=(1,1)。如果发现左上角坐标跑到了右下角坐标的右方或下方,整个过程就停止。已经打印的所有结果来连起来就是我们要求的打印结果。

java 复制代码
public void spiralOrderPrint(int[][] matrix){
    int tR = 0;
    int tC = 0;
    int dR = matrix.length - 1 ;
    int dC = matrix[0].length - 1;
    while(tR < dR && tC <= dC ){
        printEdge(matrix,tR++,tC++,dR--,dC--);
    }
}

public void printEdge(int[][] m,int tR,int tC,int dR,int dC){
    if(tR == dR){//子矩阵只有一行时
        for(int i = tC;i<=dC;i++){
            System.out.print(m[tR][i]+ " " );
        }
    }else if(tC == dC){//子矩阵只有一列时
        for(int i = tR; i<= dR;i++){
            System.out.print(m[i][tC] + " ");
        }
    }else{//一般情况
        int curC = tC;
        int curR = tR;
        while(curC != dC){
            System.out.print(m[tR][curC] + " ");
            curC++;
        }
        while(curR != dR){
            System.out.print(m[curR][dC] + " ");
            curR++;
        }
        while(curC != tC){
            System.out.print(m[dR][curC] + " ");
            curC--;
        }
        while(curR != tR){
            System.out.print(m[curR][tC] + " ");
            curR--;
        }
    }
}
相关推荐
Raas10015 小时前
MAI Gateway(魔芋企业级AI网关)功能全解:AI网关有哪些功能?一文看懂AI网关能力矩阵
大数据·人工智能·矩阵·gateway·mai gateway·企业级产品
船厂电气自动化ai大模型1 天前
AI大模型与数学 第75课 基、维度、向量空间坐标
数据结构·线性代数·算法·机器学习·推荐算法
hansang_IR2 天前
【题解】P4456 [CQOI2018] 交错序列(矩阵乘法)
c++·线性代数·算法
BSD_HY2 天前
薄膜开关矩阵扫描在低功耗MCU上的GPIO扩展实现
单片机·嵌入式硬件·矩阵·人机交互·薄膜开关·源头工厂
Nil2082 天前
leetcode 74搜索二维矩阵
算法·leetcode·矩阵
小飞象—木兮2 天前
BCG波士顿矩阵深度解析及应用指南:核心逻辑、落地路径、常见误区、案例
大数据·人工智能·矩阵·数据分析·用户运营
浪里镖客2 天前
位姿转换矩阵中旋转与平移转换的问题--解决方案
线性代数·矩阵
hansang_IR3 天前
【题解】P5364 [SNOI2017] 礼物
c++·线性代数·算法
TKcloudmaster_H3 天前
告别低效运营:跨境数据分析 + 多账号矩阵增效方案
大数据·矩阵·数据挖掘·数据分析·新媒体运营·产品运营·流量运营
IT小白杨4 天前
多店铺防关联指纹浏览器哪个好:从账号关联判定模型到环境隔离架构的一次拆解
经验分享·物联网·矩阵·架构·指纹浏览器