博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指:顺时针打印矩阵
阅读量:5249 次
发布时间:2019-06-14

本文共 1861 字,大约阅读时间需要 6 分钟。

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

样例

输入:[  [1, 2, 3, 4],  [5, 6, 7, 8],  [9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

 

解法:

 顺时针打印一圈,圈子越变越小,圈子变小一圈时,左上角坐标加一与右下角坐标减一。

所以,利用这两个坐标(tR, tC)、(dR, dC)来缩小圈子。

其中在一圈子中:

先向右打印 curC -> dC

再向下打印 curR -> dR

再向左打印 curc -> tC

再向上打印 cur -> tR

当两坐标的行相等时(tR==dR),打印这一。

当两坐标的列相等时(tC==dC),打印这一列。

 

代码实现:

package demo;public class Solution {        public static void printMatrix(int[][] m){        if(m==null || m.length<1) return;                int tR = 0;        int tC = 0;        int dR = m.length-1;        int dC = m[0].length-1;                while(tR<=dR && tC<=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 curR = tR;                int curC = tC;                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--;                }            }//end else            tR++; tC++;            dR--; dC--;        }//endwhile    }    public static void main(String[] args) {        int[][] matrix = {                 { 1, 2, 3, 4 },                 { 5, 6, 7, 8 },                 { 9, 10, 11, 12 },                { 13, 14, 15, 16 }                 };        printMatrix(matrix);            }}

 

转载于:https://www.cnblogs.com/lisen10/p/11188305.html

你可能感兴趣的文章
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>