close

第一次想這題時方向不太對

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        //index[m] 走0~n.length-1格
        //index[m+1] 走 最後(n-1)
        //index[m+2] 走 n-1~ 0
        //回到index[m+1]走 0~n-2
        int m=matrix.length;
        int n=matrix[0].length;
        int i=0;
        int r_index=0;
        List<Integer> result= new ArrayList<Integer>();
        
        while(i<m){//>字型走法
           if(i==0){//第一列
              int j=0;
              while(j<n){
                 result.add(matrix[i][j++]);
              }
            }else if(i==m-1){//最後一列
              int j=n-1;
              while(j>=0){
                 result.add(matrix[i][j--]);
              }
            }else{//中間先走每一個matrix[i]最後一個index
               result.add(matrix[i][n-1]);
            }
            i++;
            r_index++;
        }
        //走中間每一個matrix[i]第一個index
        i=0;
        while(i<m&&m>2){
            if(i!=0&&i!=m-1){
                result.add(matrix[i][0]);
            }
            i++;
        }
        //....裡面的就要在循環一次>
        
        return result;
    }
}

 

解答

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        
        List<Integer> res = new ArrayList<Integer>();
        
        if (matrix.length == 0) {
            return res;
        }
        
        int rowBegin = 0;
        int rowEnd = matrix.length-1;
        int colBegin = 0;
        int colEnd = matrix[0].length - 1;
        
        while (rowBegin <= rowEnd && colBegin <= colEnd) {
            // Traverse Right
            for (int j = colBegin; j <= colEnd; j ++) {
                res.add(matrix[rowBegin][j]);//[0][1],[0][2],[0][3]
            }
            rowBegin++;
            
            // Traverse Down
            for (int j = rowBegin; j <= rowEnd; j ++) {
                res.add(matrix[j][colEnd]);//[1][2],[2][2]
            }
            colEnd--;
            
            if (rowBegin <= rowEnd) {
                // Traverse Left
                for (int j = colEnd; j >= colBegin; j --) {
                    res.add(matrix[rowEnd][j]);//[2][1],[2][0]
                }
            }
            rowEnd--;
            
            if (colBegin <= colEnd) {
                // Traver Up
                for (int j = rowEnd; j >= rowBegin; j --) {
                    res.add(matrix[j][colBegin]);//[1][0]
                }
            }
            colBegin ++;
        }
        
        return res;
    }
}

arrow
arrow
    文章標籤
    LeetCode Java
    全站熱搜

    程式小試身手 發表在 痞客邦 留言(0) 人氣()