順時針按層列印矩陣

2021-08-08 02:29:46 字數 1313 閱讀 5390

1. 計算矩陣的行列數

行數 row = matrix.length;

列數 column = matrix[0].length;

2. 按層列印,計算層數:

layer = (math.min(row, column) + 1) /2。

層數只和行列數中的最小值min有關,

當min為奇數,layer = (min + 1) /2

當min為偶數, layer = min / 2 = (min + 1) /2

所以layer = (math.min(row, column) + 1) /2

3. 演算法

列印第i層

列印第i層的上邊

列印第i層的右邊

列印第i層的下邊

列印第i層的左邊

重點在於列印每個邊時的範圍與條件

4. **

public arraylistprintmatrix(int  matrix) 

j--;//上面的j++會導致越界,減回來

i++;//下移乙個,防止角上的數重複列印

while(i < row - k)

i--;//i++會越界1

j--;//左移乙個數

while(j >= k && k != row - k - 1)

j++;//j--會越界

i--;//上移乙個數

while(i > k && k != column - k - 1)

i++;//i--會越界1

j++;//右移乙個數

}return arr;

}

列印完某一邊後,變數(行/列)變為下一邊的定量,比如列印第i行上邊,行是定量,arr[layer][layer...(column  - layer}] (layer <= i < column -layer)。列印完上邊開始列印右邊時, 列索引變為定值,而行數開始變化 arr[column - layer - 1][(layer + 1)...(row - layer)] (layer  + 1 < row - layer)。

列印下邊時,若行數為奇數,則會重複列印中間行,因此要新增條件:row - layer -1 != layer , 意思是當下面行的起點等於終點時結束。

左邊同理, column - layer - 1 != layer

5. 別人寫的**,看起來簡潔一點

public arraylistprintmatrix(int  array) 

return result;

}

順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...

順時針列印矩陣

題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...

順時針列印矩陣

from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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。網上聽說聽到包括autod...