剑指offer(Java实现) 顺时针打印矩阵
生活随笔
收集整理的這篇文章主要介紹了
剑指offer(Java实现) 顺时针打印矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下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.
解題思路
一圈一圈地打印矩陣,按照圖中的順序的打印。
但是,要注意重復打印的問題,需要考慮兩種特殊情況
當打印下邊時,此時需要進行判斷,避免重復打印(例如:當只有矩陣只有一行元素時,此時,上邊已經打印了,下邊再打印的話會造成重復);
當打印左邊時,此時需要進行判斷,避免重復打印(例如:當只有矩陣只有一列元素時,此時,右邊已經打印了,左邊再打印的話會造成重復)。
代碼實現
import java.util.ArrayList; public class Solution {public ArrayList<Integer> printMatrix(int [][] matrix) {ArrayList<Integer> result = new ArrayList<>();if (matrix == null) {return result;}int up = 0;int down = matrix.length - 1;int right = matrix[0].length - 1;int left = 0;// 每次打印矩陣的最外層while (up <= down && right >= left) {// 上邊for (int i = left; i <= right; i++) {result.add(matrix[up][i]);}// 右邊for (int i = up + 1; i <= down; i++) {result.add(matrix[i][right]);}// 下邊,但此時需要進行判斷,避免重復打印//(例如:當只有矩陣只有一行元素時,此時,上邊已經打印了,下邊再打印的話會造成重復)if (down > up) {for (int i = right - 1; i >= left; i--) {result.add(matrix[down][i]);}}// 左邊,但此時需要進行判斷,避免重復打印//(例如:當只有矩陣只有一列元素時,此時,右邊已經打印了,左邊再打印的話會造成重復)if (right > left) {for (int i = down - 1; i > up; i--) {result.add(matrix[i][left]);}}// 進行縮圈,打印矩陣里面的元素up++;down--;right--;left++;}return result;} }總結
以上是生活随笔為你收集整理的剑指offer(Java实现) 顺时针打印矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer(Java实现) 二叉搜索
- 下一篇: LeetCode(Java) 两数相加