zoukankan      html  css  js  c++  java
  • 螺旋矩阵

    此博客链接:

    螺旋矩阵

    题目链接:https://leetcode-cn.com/problems/spiral-matrix-ii/

    题目

    给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

    示例 1:


    输入:n = 3
    输出:[[1,2,3],[8,9,4],[7,6,5]]
    示例 2:

    输入:n = 1
    输出:[[1]]
     

    提示:

    1 <= n <= 20

    题解

    此题采用取矩形左上角和右下角为基准点,每次转一圈后,把基准点向内缩,直到矩形正中心位置。

    思路:

    先定义一个N*N的数组,先从左向右遍历第一行,把相应数字添加到数组相应位置上;然后从上向下遍历最后一列数组,把相应数字添加到数组相应位置;然后从右到左遍历最后一行数组,把相应数字添加到数组相应位置;然后从下到上遍历第一列;然后从左到右遍历第二行,第一列,依次类推,直到遍历到矩形正中心。

    代码

    class Solution {
        public int[][] generateMatrix(int n) {
             int arr[][]=new int[n][n];
              int x1=0,y1=0,x2=n-1,y2=n-1;
              int num=1;
              while(x1!=x2||y1!=y2){
                //   if(x1==x2)
                //   {
                //       
                //       return arr;
                //   }
                  for(int i=y1;i<y2;i++){
                      arr[x1][i]=num;
                      num++;
                  }
                   for(int i=x1;i<x2;i++){
                      arr[i][y2]=num;
                      num++;
                  }
                   for(int i=y2;i>y1;i--){
                      arr[x2][i]=num;
                      num++;
                  }
                   for(int i=x2;i>x1;i--){
                      arr[i][y1]=num;
                      num++;
                  }
                  x1--;
                  y1--;
                  x2++;
                  y2++;
              }
              arr[x1][y1]=num;
            return arr;
        }
    }

    结果

    遍历第一行就说数组越界。但是我不知道哪里越界了。

    正确代码

    class Solution {
        public int[][] generateMatrix(int n) {
             int arr[][]=new int[n][n];
              int x1=0,y1=0,x2=n-1,y2=n-1;
              int num=1;
              while(x1<x2||y1<y2){
                  for(int i=y1;i<y2;i++){
                      arr[x1][i]=num;
                      num++;
                  }
                   for(int i=x1;i<x2;i++){
                      arr[i][y2]=num;
                      num++;
                  }
                   for(int i=y2;i>y1;i--){
                      arr[x2][i]=num;
                      num++;
                  }
                   for(int i=x2;i>x1;i--){
                      arr[i][y1]=num;
                      num++;
                  }
                  x1++;
                  y1++;
                  x2--;
                  y2--;
              }
              if( (n&1) == 1) arr[x1][y1]=num;
            return arr;
        }
    }
    

    出来混总是要还的
  • 相关阅读:
    测开之路一百一十:bootstrap图片
    测开之路一百零九:bootstrap列表
    测开之路一百零八:bootstrap表格
    测开之路一百零七:bootstrap排版
    测开之路一百零六:bootstrap布局
    学生管理之原生分页方法
    Ajax文件上传三式
    学生管理之模板继承
    Django之Models的class Meta
    [C++]指针/指针数组/数组指针/多维指针/单值指针/多值指针
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14630269.html
Copyright © 2011-2022 走看看