面試題29 順時針列印矩陣

2021-10-02 14:40:11 字數 913 閱讀 9988

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

這裡沒有涉及複雜的資料結構或者演算法,但是需要寫多個迴圈,需要判斷多個邊界條件。

需要注意的是,最後一圈可能退化成只有一行、只有一列,甚至只有乙個數字。

分析一圈:第一步總是需要的,因為至少有一步。如果只有一行,就不需要第二步了。需要第二步的前提條件是終止行號大於起始行號。需要第三步列印的前提條件是圈內至少有兩行兩列,也就是說除了終止行號大於起始行號,還要求終止列號大於起始列號。同理,需要列印第四步的前提條件是至少有三行兩列,因此終止行號要比起始行號至少大2,同時終止列號也要大於起始列號。

這裡採用乙個visit陣列來做輔助,可以解決邊界不好控制的問題。

package com.wsy;

public class main

public static void init(int n, int m)

a = new int[n][m];

visit = new boolean[n][m];

count = n * m;

int k = 1;

for (int i = 0; i < n; i++) }}

public static void print(int a)

for (; i < rows - 1 && !visit[i + 1][j]; i++)

for (; j > 0 && !visit[i][j - 1]; j--)

// 注意這裡是visit[i][j],不是visit[i - 1][j]

for (; i > 0 && !visit[i][j]; i--)

circle++;}}

public static void printvalue(int i, int j)

}

面試題29 順時針列印矩陣

輸入乙個矩陣,從外到裡以順時針順序依次列印 思路 將其看作一圈一圈列印 開始 start,start 座標,0,0 1,1 2,2 終止列印一圈的條件 cols startx2,rows starty2 如何列印一圈?從左到右 總需要 從上到下 起始行號 終止行號 從右到左 圈內至少兩行兩列 從下到...

面試題29 順時針列印矩陣

題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 1 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

面試題29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 1 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9...