国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【劍指offer】順時針打印矩陣

Hujiawei / 3222人閱讀

摘要:題目輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣則依次打印出數字題解這個題目就是正常的模擬就好。此外還要注意判斷一下矩陣是的情況。

題目

輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下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.

題解

這個題目就是正常的模擬就好。
定義四個變量。
top: 表示最上面的行;
bottom:表示最小面的行;
left:表示最左邊的列;
right: 表示最右邊的列;

左 -> 右,這個時候相當于最上面這一行就打印完了,這個時候最上面的行top要++;

右 -> 下,這個時候相當于最右邊這一列就打印完了,這個時候最右邊的列right要--;

右 -> 左,這個時候相當于最下邊這一行就打印完了,這個時候最下邊的行bottom要--;

下 -> 上,這個時候相當于最左邊這一列就打印完了,這個時候最左邊的列left要--;

但是每一步完成之后可能都會遇到邊界條件:

1 2 3 4

比如上面這個case,top++之后就應該跳出循環,不應該繼續走了。

1
2
3
4

再比如上面這個case,走到right--之后就應該跳出循環,不應該繼續走了。

此外還要注意判斷一下矩陣是null的情況。

import java.util.ArrayList;
public class Solution {
    public ArrayList printMatrix(int [][] matrix) {
       if (matrix == null) return new ArrayList();
       int top = 0;
       int bottom = matrix.length - 1;
       int left = 0;
       int right = matrix[0].length - 1;
       ArrayList result = new ArrayList();
       while (top <= bottom && left <= right) {
           for (int i = left; i <= right; i++) {
               result.add(matrix[top][i]);
           }
           top++;
           if (top > bottom) {
               break;
           }
           for (int i = top; i <= bottom; i++) {
               result.add(matrix[i][right]);
           }
           right--;
           if (left > right) {
               break;
           }
           
          for (int i = right; i >= left; i--) {
              result.add(matrix[bottom][i]);
          }
           bottom--;
           if (top > bottom) {
               break;
           }
           
           for (int i = bottom; i >= top; i--) {
               result.add(matrix[i][left]);
           }
           left++;
           if (left > right) {
               break;
           }
       }
       return result;
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72721.html

相關文章

  • LeetCode 精選TOP面試題【51 ~ 100】

    摘要:有效三角形的個數雙指針最暴力的方法應該是三重循環枚舉三個數字。總結本題和三數之和很像,都是三個數加和為某一個值。所以我們可以使用歸并排序來解決這個問題。注意因為歸并排序需要遞歸,所以空間復雜度為 ...

    Clect 評論0 收藏0
  • 【刷算法】時針打印矩陣

    摘要:題目描述輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣則依次打印出數字解題傳入的參數為或者不是數組或者是空數組傳入的是一維數組 題目描述 輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字 1...

    Terry_Tai 評論0 收藏0
  • 劍指offer系列——劍指 Offer 06. 從尾到頭打印鏈表(C語言)

    摘要:導航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結劍指從尾到頭打印鏈表題目詳情輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值用數組返回。時間復雜度方法先反轉鏈表并求長度,在將反轉后的鏈表數據拷貝至數組中。 ...

    DevTTL 評論0 收藏0
  • 劍指Offer:機器人的運動范圍

    摘要:例如,當為時,機器人能夠進入方格,因為。請問該機器人能夠達到多少個格子分析這題和上題劍指矩陣中的路徑屬于同一類型的題目。 題目 {% cq %} 地上有一個m行和n列的方格。一個機器人從坐標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行坐標和列坐標的數位之和大于k的格子。 例如,當k為18時,機器人能夠進入方格(35,37),因為3+5+3+7 = 1...

    CoderBear 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<