摘要:題目輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數(shù)字,例如,如果輸入如下矩陣則依次打印出數(shù)字題解這個題目就是正常的模擬就好。此外還要注意判斷一下矩陣是的情況。
題目
輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數(shù)字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
題解這個題目就是正常的模擬就好。
定義四個變量。
top: 表示最上面的行;
bottom:表示最小面的行;
left:表示最左邊的列;
right: 表示最右邊的列;
左 -> 右,這個時候相當(dāng)于最上面這一行就打印完了,這個時候最上面的行top要++;
右 -> 下,這個時候相當(dāng)于最右邊這一列就打印完了,這個時候最右邊的列right要--;
右 -> 左,這個時候相當(dāng)于最下邊這一行就打印完了,這個時候最下邊的行bottom要--;
下 -> 上,這個時候相當(dāng)于最左邊這一列就打印完了,這個時候最左邊的列l(wèi)eft要--;
但是每一步完成之后可能都會遇到邊界條件:
1 2 3 4
比如上面這個case,top++之后就應(yīng)該跳出循環(huán),不應(yīng)該繼續(xù)走了。
1 2 3 4
再比如上面這個case,走到right--之后就應(yīng)該跳出循環(huán),不應(yīng)該繼續(xù)走了。
此外還要注意判斷一下矩陣是null的情況。
import java.util.ArrayList; public class Solution { public ArrayListprintMatrix(int [][] matrix) { if (matrix == null) return new ArrayList(); int top = 0; int bottom = matrix.length - 1; int left = 0; int right = matrix[0].length - 1; ArrayList result = new ArrayList(); while (top <= bottom && left <= right) { for (int i = left; i <= right; i++) { result.add(matrix[top][i]); } top++; if (top > bottom) { break; } for (int i = top; i <= bottom; i++) { result.add(matrix[i][right]); } right--; if (left > right) { break; } for (int i = right; i >= left; i--) { result.add(matrix[bottom][i]); } bottom--; if (top > bottom) { break; } for (int i = bottom; i >= top; i--) { result.add(matrix[i][left]); } left++; if (left > right) { break; } } return result; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72721.html
摘要:有效三角形的個數(shù)雙指針最暴力的方法應(yīng)該是三重循環(huán)枚舉三個數(shù)字。總結(jié)本題和三數(shù)之和很像,都是三個數(shù)加和為某一個值。所以我們可以使用歸并排序來解決這個問題。注意因?yàn)闅w并排序需要遞歸,所以空間復(fù)雜度為 ...
摘要:題目描述輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數(shù)字,例如,如果輸入如下矩陣則依次打印出數(shù)字解題傳入的參數(shù)為或者不是數(shù)組或者是空數(shù)組傳入的是一維數(shù)組 題目描述 輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數(shù)字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字 1...
摘要:導(dǎo)航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結(jié)劍指從尾到頭打印鏈表題目詳情輸入一個鏈表的頭節(jié)點(diǎn),從尾到頭反過來返回每個節(jié)點(diǎn)的值用數(shù)組返回。時間復(fù)雜度方法先反轉(zhuǎn)鏈表并求長度,在將反轉(zhuǎn)后的鏈表數(shù)據(jù)拷貝至數(shù)組中。 ...
摘要:例如,當(dāng)為時,機(jī)器人能夠進(jìn)入方格,因?yàn)?。請問該機(jī)器人能夠達(dá)到多少個格子分析這題和上題劍指矩陣中的路徑屬于同一類型的題目。 題目 {% cq %} 地上有一個m行和n列的方格。一個機(jī)器人從坐標(biāo)0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進(jìn)入行坐標(biāo)和列坐標(biāo)的數(shù)位之和大于k的格子。 例如,當(dāng)k為18時,機(jī)器人能夠進(jìn)入方格(35,37),因?yàn)?+5+3+7 = 1...
閱讀 3322·2023-04-25 19:42
閱讀 1339·2021-11-23 10:11
閱讀 2281·2021-11-16 11:51
閱讀 1601·2019-08-30 15:54
閱讀 2047·2019-08-29 18:44
閱讀 1625·2019-08-23 18:24
閱讀 498·2019-08-23 17:52
閱讀 1774·2019-08-23 15:33