題目
輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。
示例 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,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length?<= 100
解題思路
1.題目要求我們按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,對(duì)于這種題我們首先要找到邊界,然后利用 for 循環(huán)去打印。
2.舉個(gè)例子:matrix = [[1,2,3],[4,5,6],[7,8,9]]
?首先我們?cè)O(shè)置四個(gè)變量(t, b, l, r)來保存矩陣的邊界
第一步從左往右打印,此時(shí)矩陣的縱坐標(biāo)不變,橫坐標(biāo)從 l 到 r(?for(int i = t, j = l; j <= r; j++))。建立一個(gè)新數(shù)組將遍歷到的元素保存進(jìn)去(res[k++] = matrix[i][j];),遍歷結(jié)束后第0行的元素已經(jīng)全部被訪問過了,所以我們要將?t 加 1。還要判斷 t 是否大于 b,若大于則表示打印完畢
?第二步從上往下打印,此時(shí)矩陣的橫坐標(biāo)不變,縱坐標(biāo)從 t 到 b(for(int i = t, j = r; i <= b; i++)),遍歷結(jié)束后第 r 列的元素已經(jīng)全部被訪問過了,所以我們要將?r?減?1。判斷 l?是r,若大于則表示打印完畢
??第三步從右往左打印,此時(shí)矩陣的縱坐標(biāo)不變,橫坐標(biāo)從 r 到 l(for(int i = b, j = r; j >= l; j--)),遍歷結(jié)束后第 b 行的元素已經(jīng)全部被訪問過了,所以我們要將 b?減?1。還要判斷 t 是否大于 b,若大于則表示打印完畢
??第四步從下往上打印,此時(shí)矩陣的橫坐標(biāo)不變,縱坐標(biāo)從 b?到 t(for(int i = b, j = l; i >= t; i--)),遍歷結(jié)束后第 l?列的元素已經(jīng)全部被訪問過了,所以我們要將 l?加?1。判斷 l?是r,若大于則表示打印完畢。
此時(shí)我們開始第二次while循環(huán),
?此時(shí) t 已經(jīng)大于 b 了,我們也就打印完了所有元素,最后返回保存打印元素的數(shù)組即可。?
代碼實(shí)現(xiàn)
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
return new int[0];
}
int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1;
int[] res = new int[(r+1) * (b+1)];
int k = 0;
while(true){
//從左往右
for(int i = t, j = l; j <= r; j++){
res[k++] = matrix[i][j];
}
t++;
if(t > b) break;
//從上往下
for(int i = t, j = r; i <= b; i++){
res[k++] = matrix[i][j];
}
r--;
if(r < l) break;
//從右往左
for(int i = b, j = r; j >= l; j--){
res[k++] = matrix[i][j];
}
b--;
if(t > b) break;
//從下往上
for(int i = b, j = l; i >= t; i--){
res[k++] = matrix[i][j];
}
l++;
if(r < l) break;
}
return res;
}
}
測(cè)試結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-646694.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-646694.html
到了這里,關(guān)于Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!