【leetcode】袁廚每日精選題詳解之老鐵,你這個螺旋給我繞暈了。

2020-10-18 11:00:53

  嗨,大家好,我是袁廚(因為酷愛做飯,所以自己考取了廚師證)。之前一直看大家寫的部落格,學到了很多東西。然後最近萌生了自己寫的想法,將自己知道的分享給需要的同學。以後每天會為大家分享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)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。