Leetcode#59 Spiral Matrix II

2017-07-06  本文已影响0人  尴尴尬尬先生
public class Solution {
    public int[][] generateMatrix(int n) {
        int right=0,down=0,left=0,up=0;
        int[][] res = new int[n][n];
        int cnt=1;
        while(true){
            for(int i=right;i<n-left;i++) res[right][i]=cnt++;
            if(cnt==(n*n+1)) break;
            down++;
            for(int i=down;i<n-up;i++) res[i][n-left-1]=cnt++;
            if(cnt==(n*n+1)) break;
            left++;
            for(int i=left;i<n-right;i++) res[n-up-1][n-i-1]=cnt++;
            if(cnt==(n*n+1)) break;
            up++;
            for(int i=up;i<n-down;i++) res[n-i-1][right]=cnt++;
            if(cnt==(n*n+1)) break;
            right++;
            
        }
        return res;
    }
}

生成旋转矩阵,关键在于四个方向的过程,遵循右-下-左-上,四个步骤,同时注意break的条件。

leetcode 54 Spiral Matrix#

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int row = matrix.length; // row是行数, col是列数
        List<Integer> res = new LinkedList<>();
        if(row==0) return res;
        int col = matrix[0].length;
        int right=0,down=0,left=0,up=0;
        while (true) {
            for (int i = right; i < col-left; i++) {
                res.add(matrix[down][i]);
            }
            down++;
            if(down+up==row) break;
            for (int i = down; i < row-up; i++) {
                res.add(matrix[i][col-left-1]);
            }
            left++;
            if(left+right==col) break;
            for(int i=left;i<col-right;i++){
                res.add(matrix[row-up-1][col-i-1]);
            }
            up++;
            
            if(down+up==row) break;
            
            for(int i=up;i<row-down;i++){
                res.add(matrix[row-i-1][right]);
            }
            right++;
            if(left+right==col) break;
        }
        return res;
    }
}

类似的题目,就是遵从四个方向的步骤,然后注意break的条件。

上一篇下一篇

猜你喜欢

热点阅读