劍指offer 順時針列印矩陣

2021-08-20 13:31:46 字數 1446 閱讀 4740

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

例如:

我們可以借助圖形來幫助思考,如下圖:

我們可以將列印分為一圈一圈的,

對於左圖,6x6的矩陣,最後一圈有4個數字,左上角為(2,2),6>2x2;

對於右圖,5x5的矩陣,最後一圈只有乙個數字,左上角也為(2,2),5>2x2;

因此我們可將cols>srartx*2且rows>starty*2當做迴圈條件來列印每個圈:

void printmatrixclockwisely(int **numbers, int cols, int rows)

}

列印每圈又分為4步:

1. 從左到右列印一行

2. 從上到下列印一行

3. 從右到左列印一行

4. 從下到上列印一行

值得注意的是,最後一圈會退化成一行或只有一列,甚至只有乙個數字:

如下圖:

因此我們上面四步的迴圈還需要一定的判斷條件,比如第二步的前提是終止的行號大於起始行號,其餘步驟依次論推。

**如下:

void printmatrixincircle(int **numbers, int cols, int rows, int start)

//從上到下列印一列

if (start < endy)

}//從右到左列印一行

if (start < endx&&start < endy)

}//從下到上列印一列

if (start < endx&&start < endy - 1)}}

我們測試也需要測各種情況:

如下

void test(int cols, int rows)

}printmatrixclockwisely(numbers, cols, rows);

printf("\n");

for (int i = 0; i < rows; ++i)

delete(int*)numbers[i];

delete numbers;

}int main(int argc, char* argv)

結果:

劍指offer 順時針列印矩陣

題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 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。分析 第一次看到這個題目的時候,覺得...

劍指offer 順時針列印矩陣

題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字,例如,如果輸入如下矩陣 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.思路 遞迴列印,處理好邊界就ok...

劍指offer 順時針列印矩陣

題目描述 給定乙個矩陣按照順時針順序從外到內的列印這個矩陣 解題思路 設定乙個全域性的方向向量dir其中的順序是向右,向下,向左,向上 每次給行加上乙個方向向量,當出現越界或者已經列印過的時候重新選擇方向 vectorprintmatrix vector matrix int d 0 int row...