嗨,大家好,我是袁廚(因為酷愛做飯,所以自己考取了廚師證)。之前一直看大家寫的部落格,學到了很多東西。然後最近萌生了自己寫的想法,將自己知道的分享給需要的同學。以後每天會為大家分享leetcode精選題目的各種題解,並且每週會整理一下該周刷的所有題目,及解題框架。大家微信搜尋【程式設計師愛做飯】關注我吧!
題目描述
順時針遍歷
其實這個題目還算是比較容易,但是因為可能處理不好邊界情況,所以還是需要細心思考,這個題目我師兄面試的時候就遇到了,所以很有學習價值。主要思想就是通過順時針進行一層一層的進行遍歷,然後最後在上方和左方處理邊界情況,然後就實現了螺旋遍歷。
箭頭代表遍歷順序,長度代表元素個數。總的思想就是這樣的。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<>();
//防止出現空的情況,先將其排除
if(matrix.length==0||matrix==null||matrix[0].length==0){
return list;
}
//得出陣列的長和寬
int len = matrix.length;
int widlen = matrix[0].length;
//最小的那個加一除以2,則為最小 遍歷次序
for(int i=0;i<(Math.min(len,widlen)+1)/2;i++){
//第一條邊遍歷情況
for(int j =i;j<widlen-i;j++){
list.add(matrix[i][j]);
}
//第二條邊遍歷情況
for(int j=i+1;j<len-i;j++){
list.add(matrix[j][widlen-i-1]);
}
//第三條遍歷情況
for(int j = widlen-i-2;j>=i;j--){
//防止出現重複遍歷的情況
if(list.size()==len*widlen){
break;
}
list.add(matrix[len-i-1][j]);
}
//第四條遍歷情況
for(int j = len - i-2;j>i;j--){
//防止出現重複遍歷的情況
if(list.size()==len*widlen){
break;
}
list.add(matrix[j][i]);
}
}
return list;
}
}
學會這個題目可以直接解決兩道題,螺旋插入的題目同樣也可以解決。
更多題目總結請掃描下面二維條碼,一塊刷題呀。
作者:LeetCode
連結:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。