leetcode講解--885. Spiral Matrix III

題目

On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) facing east.java

Here, the north-west corner of the grid is at the first row and column, and the south-east corner of the grid is at the last row and column.ide

Now, we walk in a clockwise spiral shape to visit every position in this grid. this

Whenever we would move outside the boundary of the grid, we continue our walk outside the grid (but may return to the grid boundary later.) spa

Eventually, we reach all R * C spaces of the grid.code

Return a list of coordinates representing the positions of the grid in the order they were visited.ci

Example 1:leetcode

Input: R = 1, C = 4, r0 = 0, c0 = 0
Output: [[0,0],[0,1],[0,2],[0,3]]

Example 2:rem

Input: R = 5, C = 6, r0 = 1, c0 = 4
Output: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

Note:get

  1. 1 <= R <= 100
  2. 1 <= C <= 100
  3. 0 <= r0 < R
  4. 0 <= c0 < C

題目地址it

講解

這道題花了我很多時間,主要在於沒有找到規律。螺線中有一條很重要的規律,臂長的增加是有規律的:1 1 2 2 3 3 ...

而後就是結束條件如何設定,這裏我使用了堆滿結果空間就返回的方式。

Java代碼

class Solution {
    public int[][] spiralMatrixIII(int R, int C, int r0, int c0) {
        int[][] result = new int[R*C][2];
        int count=0;
        result[0] = new int[]{r0, c0};
        int size=0;
        while(count<R*C-1){
            size++;
            for(int j=1;j<=size;j++){
                c0 = c0+1;
                if(r0>=0 && c0>=0 && r0<R && c0<C){
                    result[++count] = new int[]{r0, c0};
                    if(count==R*C-1){
                        return result;
                    }
                }
            }
            for(int j=1;j<=size;j++){
                r0=r0+1;
                if(r0>=0 && c0>=0 && r0<R && c0<C){
                    result[++count] = new int[]{r0, c0};
                    if(count==R*C-1){
                        return result;
                    }
                }
            }
            size++;
            for(int j=1;j<=size;j++){
                c0 = c0-1;
                if(r0>=0 && c0>=0 && r0<R && c0<C){
                    result[++count] = new int[]{r0, c0};
                    if(count==R*C-1){
                        return result;
                    }
                }
            }
            for(int j=1;j<=size;j++){
                r0=r0-1;
                if(r0>=0 && c0>=0 && r0<R && c0<C){
                    result[++count] = new int[]{r0, c0};
                    if(count==R*C-1){
                        return result;
                    }
                }
            }
        }
        return result;
    }
}
相關文章
相關標籤/搜索