輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。
例如:
我們可以借助圖形來幫助思考,如下圖:
我們可以將列印分為一圈一圈的,
對於左圖,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...