顺时针打印矩阵
来源:互联网 发布:华风爱科天气数据不对 编辑:程序博客网 时间:2024/05/23 15:07
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
package JzOffer;import java.util.ArrayList;import java.util.List;/** * 从外向内打印矩阵 * @author 服兰 * */public class DayinJvzhen {public static void main(String[] argd){DayinJvzhen test = new DayinJvzhen();int[][] array={{1,2},{3,4}};System.out.println(test.spiralOrderprint(array));} public ArrayList<Integer> spiralOrderprint(int[][] matrix){ ArrayList<Integer> result = new ArrayList<Integer>(); if(matrix.length==0){ return result; } 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--, result); } return result; } /** * 顺时针打印矩阵的一圈,改圈左上角是(tR,tC),右下角是(dR,dC) * @param m * @param tR * @param tC * @param dR * @param dC */ public void printEdge(int[][] m ,int tR,int tC,int dR,int dC,ArrayList<Integer> result){ if(tR == dR){ //只有一行 for(int i=tC;i<=dC;i++){ result.add(m[tR][i]); } }else if(tC == dC){ //只有一列 for(int i=tR;i<=dR;i++){ result.add(m[i][tC]); } }else{ int curR = tR;int curC = tC; while(curC!=dC){ //从左向右 result.add(m[tR][curC]); curC++; //此时curC = dC } while(curR!=dR){ //右上到右下 result.add(m[curR][dC]); curR++; //此时curR = dR } while(curC!=tC){ //右下到左下 result.add(m[dR][curC]); curC--; //此时curC = tC } while(curR!=tR){ //左下到左上 result.add(m[curR][tC]); curR--; } } }}
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- NoSQL数据库redis和mongo使用
- HTML中Doctype的作用以及浏览器的严格模式和混杂模式的区别
- 设置session的生命周期(php)
- 关于输入、输出电容在 LDO 应用中的重要性
- 我的threejs学习笔记(五)——点光源属性控制
- 顺时针打印矩阵
- kettle传数据到MPP遇到字段alias、type、identify被加双引号解决
- android混合开发之unity
- 个人总结Swift 中可选值(Optional)
- CCF第一题--中间数
- C#基础-Convert类、DateTime类、Math类
- git常用命令
- JavaWeb——AJAX(1)
- lift and throw(from蓝桥)(深度优先搜索)