顺时针打印数组

题意

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

  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<Integer> printMatrix(int [][] matrix) {
int h = matrix.length;
int l = matrix[0].length;
ArrayList<Integer> ans = new ArrayList<Integer>();
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<Integer> ans = new ArrayList<Integer>(); ans = printMatrix(matrix); for(int i : ans)
System.out.printf("%d\t", i);
}
}

结果

1 2 4 6 8 10 9 7 5 3

【剑指offer】顺时针打印数组的更多相关文章

  1. 用js刷剑指offer(顺时针打印数组)

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  2. 剑指offer - 顺时针打印矩阵 - JavaScript

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...

  3. 剑指OFFER——顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8 ...

  4. 剑指Offer顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  5. 剑指Offer 顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  6. python剑指offer 顺时针打印指针

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  7. 剑指Offer:把数组排成最小的数【45】

    剑指Offer:把数组排成最小的数[45] 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如,输入数组是{3.32.321},则打印出来的这3 ...

  8. 力扣 - 剑指 Offer 17. 打印从1到最大的n位数

    题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...

  9. 【剑指Offer】把数组排成最小的数 解题报告(Python)

    [剑指Offer]把数组排成最小的数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  10. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

随机推荐

  1. 鸡尾酒排序Cocktail sort

    鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 3 4 5 1] 第二步迭代,3 < 4不换 [ ...

  2. 课下加分项目 MYPWD 20155335 俞昆

    Mypwd 的解读与实现 20155335 linux下pwd命令的编写 实验要求: 1 .学习pwd命令 2 . 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 .实现my ...

  3. MySQL数据库运行环境的搭建

    第一步:安装wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b文件,安装过程中可能会遇到问题,把遇到的问题代码复制粘贴到360人工服务,查找方案 ...

  4. $.on方法与$.click()的区别

    1.$.on("click") 支持动态元素绑定事件,该事件是绑定到document上,只要符合条件的元素即可绑定事件,同时$.on()可以绑定多个事件 on方法 on(event ...

  5. Mel倒谱系数

    Mel倒谱系数:MFCC Mel频率倒谱系数(Mel Frequency Cepstrum Coefficient)的缩写是MFCC,Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 ...

  6. Bookmarks_www2

    Bookmarks Bookmarks alexis- (Alex Incogito) - Repositories · GitHub GitHub - aetcnc-Arduino_DeltaHMI ...

  7. Mongo 配置文件 [www]

    Mongo 配置文件  [www] http://blog.chinaunix.net/uid-25206403-id-3510934.html mongodb 安装使用 http://blog.si ...

  8. 【UOJ#9】vfk的数据

    我感觉这题可以出给新高一玩2333 #include<bits/stdc++.h> #define N 10005 using namespace std; string s[N]; in ...

  9. BZOJ 3656: 异或 (组合数取模 CRT)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3656 大意:经过一通推导,问题变成求\[\binom N M \mod P\],其中N,M<= ...

  10. HDU 6188 Duizi and Shunzi 贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意:给了n个数,然后现在问我们最多构成多少个对子和顺子,其中对子是2个相同的牌,顺子是3个连续 ...