剑指offer_数组---顺时针打印矩阵
2017-08-25 16:06
267 查看
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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,每圈的四行打印的边界条件是什么
代码实现
/** * */ package 数组; import java.util.ArrayList; /** * <p> * Title:PrintMatrix * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月25日 下午2:54:00 */ public class PrintMatrix { /** * * 循环打印结束条件:当行长度不再大于2倍的左上角列的位置,列的长度不再大于2倍的左上角行的位置 * * @param args */ public ArrayList<Integer> printMatrix(int[][] matrix) { ArrayList<Integer> list = new ArrayList<Integer>(); if (matrix == null || matrix.length < 1 || matrix[0].length < 1) { return list; } int rows = matrix.length; int cols = matrix[0].length; int start = 0; while (cols > 2 * start && rows > 2 * start) { helper(matrix, rows, cols, list, start); start++; } return list; } public void helper(int[][] matrix, int rows, int cols, ArrayList<Integer> list, int start) { int endX = cols - start - 1; // 列号结束的地方 int endY = rows - start - 1; // 行标号结束的地方 // 从左到右打印一行 for (int i = start; i <= endX; i++) { list.add(matrix[start][i]); } // 从上到下打印一列,只有终止行号大于起始行号才可以 if (endY > start) { for (int i = start + 1; i <= endY; i++) { list.add(matrix[i][endX]); } } // 从右到左打印一行,只有终止行号大于起始行号且终止列号大于起始列号才可以 if (endY > start && endX > start) { for (int i = endX - 1; i >= start; i--) { list.add(matrix[endY][i]); } } // 从下到上打印一行,终止列号大于起始列号,终止行号大于起始行号+1才行 if (endY - 1 > start && endX > start) { for (int i = endY - 1; i > start; i--) { list.add(matrix[i][start]); } } } public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); int[][] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; PrintMatrix p = new PrintMatrix(); list = p.printMatrix(matrix); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)); } } }
测试结果
123698745
相关文章推荐
- 剑指offer-面试题20:顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer——顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指Offer面试题20顺时针打印矩阵,面试题21包含min函数的栈
- 剑指offer——顺时针打印矩阵
- 【剑指offer】19顺时针打印矩阵
- 剑指Offer学习总结-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指Offer-顺时针打印矩阵-C++-2ms-456k
- 剑指offer-05-顺时针打印数组
- 剑指Offer面试题20(Java版):顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- 剑指Offer之面试题20:顺时针打印矩阵
- 【剑指offer——JAVA实现】顺时针打印矩阵(含思路解答示意图)
- 剑指offer:顺时针打印矩阵
- 剑指offer--->顺时针打印矩阵
- 剑指offer20顺时针打印矩阵
- 剑指offer——顺时针打印矩阵