剑指offer第十八题 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

解题思路:一次去掉一个外圈,当最后只剩一行或一列时停止递归。(ps:这题就是绕,仔细点就解决了!!!)

 1 import java.util.ArrayList;
 2 public class Solution {
 3     public ArrayList<Integer> printMatrix(int [][] matrix) {
 4         ArrayList arr = new ArrayList();
 5         if(matrix==null||matrix.length==0){
 6             return arr;
 7         }else{
 8             way_getArr(matrix,0,matrix[0].length-1,0,matrix.length-1,arr);
 9             return arr;
10         }
11     }
12     public void way_getArr(int[][] matrix,int left,int right,int top,int bottom,ArrayList<Integer> arr){
13         if(left<right&&top<bottom){
14             for(int i=left;i<=right;i++){
15             arr.add(matrix[top][i]);
16             }
17             for(int j=top+1;j<=bottom;j++){
18                 arr.add(matrix[j][right]);
19             }
20             for(int k=right-1;k>=left;k--){
21                 arr.add(matrix[bottom][k]);
22             }
23             for(int l=bottom-1;l>top;l--){
24                 arr.add(matrix[l][left]);
25             }
26             way_getArr(matrix,left+1,right-1,top+1,bottom-1,arr);
27         }else if(left==right&&top<bottom){
28             for(int i=top;i<=bottom;i++){arr.add(matrix[i][left]);}
29         }else if(top==bottom&&left<right){
30             for(int i=left;i<=right;i++){arr.add(matrix[top][i]);}
31         }else if(left==right&&top==bottom){
32             arr.add(matrix[top][left]);
33         }else{}
34     }
35 }

打卡!!!

fighting??

原文地址:https://www.cnblogs.com/haq123/p/12178668.html

时间: 2024-08-28 01:04:35

剑指offer第十八题 顺时针打印矩阵的相关文章

剑指Offer(十九)——顺时针打印矩阵

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵: 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. 思想: 一圈一圈的打印,这道题难点在于何时中止打印. 图为在矩阵中某一圈,length为矩阵长度,width为矩阵宽度,坐标值为数组下标. 对于我们这道题来说,只

【剑指offer】面试题 29. 顺时针打印矩阵

面试题 29. 顺时针打印矩阵 题目描述 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10 代码实现 import java.util.

《剑指offer》面试题20 顺时针打印矩阵 Java版

我的方法:遇到这种题最好在纸上画一画打印路线.我利用了4个标志left.top.right.bottom,表示当前需要打印的左界.上届.右界和下界,换句话说这些界线之外的已经打印了,如此一来判断结束的标准也很清晰,top>bottom或者left>right就表示已经没有需要打印的空间.和第14题中确定结束条件类似,明确下标的含义,就能很快判断结束条件. public void myPrint(int[][] a){ if(a == null || a.length == 0 || (a.le

【剑指Offer】【数组】顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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 11 12 13 14 15 16 A:不是很懂书上递归的写法.定义2个变量保存行数和列数(因为不是一个正方形矩阵) 定义4个变量保存边界值,然后使用4个循环就可以

剑指Offer(书):顺时针打印数组

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.gjjun.jzoffer;import java.util.ArrayList; import java.ut

剑指offer(五十八)之正则表达式匹配

题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 代码: <span style="color:#000099;">pu

剑指offer(四十八)之复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 代码: <span style="color:#000099;">import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public class Solution { public RandomListNod

剑指offer(二十八)之丑数

题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路分析: 1.首先,丑数都是由前5个丑数1,2,3,4,5乘以因子2,3,5才得到的. 2.这里将得到的丑数都存放在数组中.分析一下得到第6个丑数的过程,其他丑数类比. 3.1 将前5个丑数乘以2,然后与第5个丑数进行比较,找出第一个乘以2大于第5个丑数的丑数,将其放在min2中. 3.2 将前5个丑数乘以

剑指offer(三十八)之第一个只出现一次的字符位置

题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.位置索引从0开始 思路分析: 1.先把字符串存到字节数组当中 2.设置一个标志位,再用两个FOR循环 <span style="font-family:SimSun;font-size:24px;">public class Solution { public int FirstNotRepeatingChar(String str)