剑指offer(十六)之顺时针打印矩阵
来源:互联网 发布:淘宝上架虚拟宝贝教程 编辑:程序博客网 时间:2024/05/16 01:16
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
思路分析:
顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印,
同样只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况。
代码:
<span style="font-size:18px;">import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] array) { ArrayList<Integer> list = new ArrayList<Integer> (); if(array.length==0){ return list; } //数组行数 int rows = array.length; //数组列数 int columns = array[0].length; if(columns==0){ return list; } //打印的圈数 int layers = (Math.min(rows,columns)-1)/2+1; for(int i=0;i<layers;i++){ //从左至右打印 for(int k = i;k<columns-i;k++){ list.add(array[i][k]); } //从右上至右下打印 for(int j=i+1;j<rows-i;j++){ list.add(array[j][columns-i-1]); } //从下右至下左打印,为了避免重复打印行(rows-i-1!=i) for(int k=columns-i-2;(k>=i)&&(rows-i-1!=i);k--){ list.add(array[rows-i-1][k]); } //从左下至左上打印,为了避免重复打印列(columns-i-1!=i) for(int j=rows-i-2;(j>i)&&(columns-i-1!=i);j--){ list.add(array[j][i]); } } return list; }}</span>
0 0
- 剑指offer(十六)之顺时针打印矩阵
- 《剑指offer》学习之--顺时针打印矩阵
- 剑指Offer之 - 顺时针打印矩阵
- 【剑指offer】之顺时针打印矩阵
- 剑指offer之顺时针打印矩阵
- 剑指offer 之 顺时针打印矩阵
- 剑指offer之十八---顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer之找没有重复出现的数
- Spring + Cache/Ehcache
- Understanding and Analyzing iOS Application Crash Reports
- eclipse快捷键整理
- 关于 overridePendingTransition()使用
- 剑指offer(十六)之顺时针打印矩阵
- 重学数据结构系列之——总结
- 浮点数比较大小
- 2013(跟2014一样的)
- GUI实现万年历
- 第8周项目1:数组作数据成员(1)
- qjson解析和构建
- 图片解码方法
- attr()、prop() 、end()、detach()