每天一道算法题——顺时针打印矩阵
来源:互联网 发布:知了为什么是这个知 编辑:程序博客网 时间:2024/05/26 05:53
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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,2],[3,4],[5,6],[7,8],[9,10]]
对应输出应该为:
[1,2,4,6,8,10,9,7,5,3]
分析:
计算出层数,count为行列长度的最小值/2,为了避免奇偶性对结果的影响,采取(min/2-1)+1。(行为m,列为n)得到了层数,就开始第一次顺序打印。开始从左上到右上,将a[0][0]~a[0][n-1]分别add到List中。然后从右上到右下,将a[1][n-1]~a[m-1][n-1]add到List中。然后从右下到左下a[m-1][n-2]~a[m-1][1]。左下-左上…….根据规律即可慢慢推导出来4个for循环
for (int i = 0; i < count; i++) {
for(int j=i;j<n-i;j++){arrayList.add(matrix[i][j]);}
for (int k = i+1; k < m-i; k++) {arrayList.add(matrix[k][n-i-1]);}
for(int o=n-i-2;(o>=i)&(m-i-1!=i);o--){arrayList.add(matrix[m-i-1][o]);}
for(int p=m-i-2;(p>i)&(n-i-1!=i);p--){arrayList.add(matrix[p][i]);}
}第二种方法摘自网友的解释,比较巧妙。
源码等有空就补上:
可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作
例如
1 2 3
4 5 6
7 8 9
输出并删除第一行后,再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
继续重复上述操作即可。
源码:
1.
import java.util.ArrayList;public class Test1 { public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> arrayList = new ArrayList<Integer>(); if (matrix.length != 0) { if (matrix[0].length!=0) { int m = matrix.length; int n = matrix[0].length; int count = ((m<n?m:n)-1)/2+1; for (int i = 0; i < count; i++) { for(int j=i;j<n-i;j++){arrayList.add(matrix[i][j]);} for (int k = i+1; k < m-i; k++) {arrayList.add(matrix[k][n-i-1]);} for(int o=n-i-2;(o>=i)&(m-i-1!=i);o--){arrayList.add(matrix[m-i-1][o]);} for(int p=m-i-2;(p>i)&(n-i-1!=i);p--){arrayList.add(matrix[p][i]);} } } return arrayList; } return arrayList; } }}
2.
可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作例如 1 2 34 5 67 8 9输出并删除第一行后,再进行一次逆时针旋转,就变成:6 95 84 7继续重复上述操作即可。
运行测试:
第一种:
运行时间:36ms
占用内存:8656k
第二种:
总结:
待续
- 每天一道算法题——顺时针打印矩阵
- 每天一个算法之顺时针打印矩阵
- 经典算法——顺时针打印矩阵
- 算法题/顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 每天一道算法题——每天一道算法题
- [算法学习]顺时针打印矩阵
- 算法题目--顺时针打印矩阵
- 算法题目---顺时针打印矩阵
- 《剑指offer》——顺时针打印矩阵
- 《剑指offer》——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 编程练习——顺时针打印矩阵
- 顺时针打印矩阵——20
- HDFS Java API
- PHP7在windows7中的环境配置
- Java web从入门到放弃(4)
- 利用c语言结构体实现通讯录
- centos 最小化安装后网络启用和主机名称修改
- 每天一道算法题——顺时针打印矩阵
- codevs 1082 一维树状数组区间修改区间查询
- 键值对直接初始化常量
- 通过例子学习spark dataframe--基础函数和Action函数
- HDFS的JAVA API 操作
- MTCS Certification Scheme
- ubuntu 16.04 LTS
- 【Scikit-Learn 中文文档】大规模计算的策略: 更大量的数据
- collection