演算法學習之實現二維矩陣的順時針遍歷
阿新 • • 發佈:2018-12-21
背景
有這麼一道面試題,讓順時針輸出一個二維矩陣。
思路
記錄開始行開始列和結束行結束列,做為輸出的邊界
除了要輸出的矩陣,我還設定了一個狀態矩陣,用來記錄矩陣中某一個元素輸出與否,沒有輸出過的元素,才進行輸出
實現
測試用的矩陣:
123
123
123
123
程式碼如下:
public class ExampleUnitTest { int[][] matrix = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}}; int[][] hasPrintedMatrix = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; @Test public void addition_isCorrect() throws Exception { int endLine = 3, endColumn = 2; int startLine = 0, startColumn = 0; int i, j; while (startLine <= endLine && startColumn <= endColumn) { i = startLine; j = startColumn; // 從左上往右上 for (; j < endColumn + 1; j++) { printData(i, j); } j--; i++; // 從右上往右下 for (; i < endLine + 1; i++) { printData(i, j); } i--; j--; // 從右下到左下 for (; j > startColumn - 1; j--) { printData(i, j); } i--; j++; // 從左下到左上 for (; i > startLine; i--) { printData(i, j); } startLine++; startColumn++; endColumn--; endLine--; } } private void printData(int i, int j) { if (hasPrintedMatrix[i][j] == 0) { System.out.print(matrix[i][j] + " "); hasPrintedMatrix[i][j] = 1; } } }
結果
結語
方法似乎笨拙了一些,但……至少解決了問題