博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】顺时针打印数组
阅读量:6246 次
发布时间:2019-06-22

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

顺时针打印数组

题意

例如我们有一个二维数组,如下

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 com.niuke;import java.util.ArrayList;/** * Created by puyangsky on 17/3/11. * 顺时针打印数组 *  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 */public class PrintMatrix {    public static ArrayList
printMatrix(int [][] matrix) { int h = matrix.length; int l = matrix[0].length; ArrayList
ans = new ArrayList
(); if (h==0 || l==0) return ans; int left_right = 0; int top_down = 0; int right_left = l-1; int down_top = h-1; while (left_right <= right_left && top_down <= down_top) { //从左至右打印 for (int i = left_right; i <= right_left; i++) ans.add(matrix[top_down][i]); //从上至下打印 for (int i = top_down+1; i <= down_top; i++) ans.add(matrix[i][right_left]); //从右至左打印 if(top_down < down_top) { for (int i = right_left-1; i >= left_right; i--) ans.add(matrix[down_top][i]); } //从下至上打印 if(right_left > left_right) { for (int i = down_top-1; i >= top_down+1; i--) ans.add(matrix[i][left_right]); } //更新四个下标的值 down_top--;left_right++;right_left--;top_down++; } return ans; } public static void main(String[] args) { int[][] matrix = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} }; ArrayList
ans = new ArrayList
(); ans = printMatrix(matrix); for(int i : ans) System.out.printf("%d\t", i); }}

结果

1 2 4 6 8 10 9 7 5 3

转载于:https://www.cnblogs.com/puyangsky/p/6535672.html

你可能感兴趣的文章
Linux 上ps 命令的使用
查看>>
祛斑用什么产品比较好?简单一步轻松搞定
查看>>
OkHttp发起请求源码阅读(一)
查看>>
复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
查看>>
java spring cloud版b2b2c社交电商-配置中心svn示例和refresh
查看>>
回顾我的三年前端|掘金技术征文
查看>>
如何保障微服务架构下的数据一致性?
查看>>
开源框架和开源项目
查看>>
算法学习之路|二分图的最大匹配—匈牙利算法(Dfs实现)
查看>>
iOS UIView高级动画 关键帧动画
查看>>
java版spring cloud+spring boot+redis多租户社交电子商务平台 (六)分布式配置中心(Spring Cloud Config)...
查看>>
一个初学者是如何制作移动端B站画友社区的
查看>>
互联网分布式微服务云平台规划分析--平台整体规划
查看>>
Swift对象转为C指针
查看>>
Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)
查看>>
ThinkSNS系统升级,版本多样化
查看>>
ecshop使用smtp发送邮件
查看>>
RubyInstaller
查看>>
21. SQL -- TSQL架构,系统数据库,文件,SQL 认证,TSQL语句
查看>>
CentOS6.0添加163和epel源
查看>>