美文网首页
Leetcode#59 Spiral Matrix II

Leetcode#59 Spiral Matrix II

作者: 尴尴尬尬先生 | 来源:发表于2017-07-06 14:21 被阅读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的条件。

    相关文章

      网友评论

          本文标题:Leetcode#59 Spiral Matrix II

          本文链接:https://www.haomeiwen.com/subject/exphhxtx.html