剑指offer----顺时针打印数组----java实现
2016-07-12 20:13
363 查看
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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)从下到上
问题的复杂性在于如果打印中矩阵只剩下一个数字、只有一行、只有一列的情况下,该如何控制。
四个参数:left、right、top、buttom
(1)从左到右,第一步是需要的,判断left是否小于等于right;
(2)从上到下,终止行要大于起始行,即buttom>top;
(3)从右到左,至少要有两行两列才会有第三步,也就是right>left&&buttom>top;
(4)从下到上,至少要有三行两列才会执行第四步;即right >left&&buttom-1>top.
思路:顺时针打印时,分为四个步骤:
(1)从左到右
(2)从上到下
(3)从右到左
(4)从下到上
问题的复杂性在于如果打印中矩阵只剩下一个数字、只有一行、只有一列的情况下,该如何控制。
四个参数:left、right、top、buttom
(1)从左到右,第一步是需要的,判断left是否小于等于right;
(2)从上到下,终止行要大于起始行,即buttom>top;
(3)从右到左,至少要有两行两列才会有第三步,也就是right>left&&buttom>top;
(4)从下到上,至少要有三行两列才会执行第四步;即right >left&&buttom-1>top.
public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList list = new ArrayList(); int rows = matrix.length; int colums = matrix[0].length; if(matrix == null||rows==0||colums==0) return list; int left = 0; int right = rows-1; int top = 0; int buttom = colums -1; while(left<=right && top<= buttom) { //第一步从左到右 for (int i = left; i <= right; ++i) { list.add(matrix[top][i]);//列在变化,行是最上面一行 } //第二步从上到下 buttom>top if(buttom > top) { for (int i = top + 1; i <= buttom; ++i) { list.add(matrix[i][right]);//行在变化,列是最右列 } } //第三步从右到左 right>left&&buttom>top if(right > left && buttom > top) { for (int i = right -1; i >= left; --i) { list.add(matrix[buttom][i]); //列在变化,最低行 } } //第四步从下到上 if(buttom - 1 > top && right > left) { for (int i = buttom -1; i > top; --i) { list.add(matrix[i][left]); } } left++;right--; top++;buttom--; } return list; }
相关文章推荐
- 面试题3:二维数组中的查找
- 面试题四:替换空格
- 剑指offer第一题
- 剑指Offer 面试题3:二维数组中查找
- 从尾到头打印链表
- 二叉树两个结点的最低公共祖先
- 根据后序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据后序和中序遍历重建二叉树
- 二叉树两个结点的最低公共祖先
- 《剑指Offer》面试题1:赋值运算符函数
- 剑指offer第三题:二维数组中查找
- 剑指offer 重建二叉树 java实现
- 剑指offer 替换空格 java实现
- 九度 Online Judge 之《剑指 Offer》一书相关题目解答
- 剑指offer 二维数组中的查找
- 剑指offer 调整数组顺序使奇数位于偶数前面
- 【练习笔记】剑指offer-面试题8 :旋转数组的最小数字
- 【练习笔记】剑指offer-变态跳台阶