輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。
這裡沒有涉及複雜的資料結構或者演算法,但是需要寫多個迴圈,需要判斷多個邊界條件。
需要注意的是,最後一圈可能退化成只有一行、只有一列,甚至只有乙個數字。
分析一圈:第一步總是需要的,因為至少有一步。如果只有一行,就不需要第二步了。需要第二步的前提條件是終止行號大於起始行號。需要第三步列印的前提條件是圈內至少有兩行兩列,也就是說除了終止行號大於起始行號,還要求終止列號大於起始列號。同理,需要列印第四步的前提條件是至少有三行兩列,因此終止行號要比起始行號至少大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...