《LeetCode力扣练习》代码随想录——数组(螺旋矩阵II---Java)

《LeetCode力扣练习》代码随想录——数组(螺旋矩阵II—Java)



刷题思路来源于 代码随想录

59. 螺旋矩阵 II
  • 左闭右开——[x,y)
    class Solution {
        public int[][] generateMatrix(int n) {
    
            if(n==1){
                return new int[][]{{1}};
            }
    
            int[][] result=new int[n][n];
            int start=0;
            int row=-1;
            int col=-1;
            int loop=0;
            int offset=1;
            int count=1;
    
            for(;loop<(n/2);loop++){
    
                for(col=start;col<(n-offset);col++){
                    result[start][col]=count++;
                }
    
                for(row=start;row<(n-offset);row++){
                    result[row][col]=count++;
                }
    
                for(;col>start;col--){
                    result[row][col]=count++;
                }
    
                for(;row>start;row--){
                    result[row][col]=count++;
                }
    
                start++;
                offset++;
    
            }
    
            if(n%2==1){
                result[start][start]=count;
            }
    
            return result;
    
        }
    }
    
54. 螺旋矩阵
  • 左闭右开——[x,y)
    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
    
            int m=matrix.length;
            int n=matrix[0].length;
    
            if(m==1&&n==1){
                return Collections.singletonList(matrix[0][0]);
            }
    
            List<Integer> result=new ArrayList<>();
            
            int startRow=0;
            int startCol=0;
    
            int row=-1;
            int col=-1;
    
            int offset=1;
            int loop=m<n?(m/2):(n/2);
    
            for(;loop>0;loop--){
    
                for(col=startCol;col<(n-offset);col++){
                    result.add(matrix[startRow][col]);
                }
    
                for(row=startRow;row<(m-offset);row++){
                    result.add(matrix[row][col]);
                }
    
                for(;col>startCol;col--){
                    result.add(matrix[row][col]);
                }
    
                for(;row>startRow;row--){
                    result.add(matrix[row][col]);
                }
    
                startRow++;
                startCol++;
    
                offset++;
    
            }
    
            if((m<n?m:n)%2==1){
    
                if(n>m){
                    for(col=startCol;col<=(n-offset);col++){
                        result.add(matrix[startRow][col]);
                    }
                }else{
                    for(row=startRow;row<=(m-offset);row++){
                        result.add(matrix[row][startCol]);
                    }
                }
    
            }
    
            return result;
    
        }
    }
    
LCR 146. 螺旋遍历二维数组
  • 左闭右开——[x,y)
    class Solution {
        public int[] spiralArray(int[][] array) {
    
            int m=array.length;
            
            if(m==0){
                return new int[]{};
            }
    
            int n=array[0].length;
    
            if(m==1&&n==1){
                return new int[]{array[0][0]};
            }
    
            int[] result=new int[m*n];
    
            int startRow=0;
            int startCol=0;
    
            int row=-1;
            int col=-1;
    
            int offset=1;
            int loop=(m<n?m:n)/2;
            int count=0;
    
            for(;loop>0;loop--){
    
                for(col=startCol;col<(n-offset);col++){
                    result[count++]=array[startRow][col];
                }
    
                for(row=startRow;row<(m-offset);row++){
                    result[count++]=array[row][col];
                }
    
                for(;col>startCol;col--){
                    result[count++]=array[row][col];
                }
    
                for(;row>startRow;row--){
                    result[count++]=array[row][col];
                }
    
                offset++;
    
                startRow++;
                startCol++;
    
            }
    
            if((m<n?m:n)%2==1){
    
                if(n<m){
                    for(row=startRow;row<=(m-offset);row++){
                        result[count++]=array[row][startCol];
                    }
                }else{
                    for(col=startCol;col<=(n-offset);col++){
                        result[count++]=array[startRow][col];
                    }
                }
    
            }
    
            return result;
    
        }
    }
    

你可能感兴趣的:(LeetCode,leetcode,矩阵,java)