• 【力扣】螺旋矩阵


    59. 螺旋矩阵 II

    刚开始遇到这道题目的时候相信没见过的同学多多少少都会有点懵圈,感觉题目有点无从下手,但其实只要抓住本质就行了,题目的最终目的就是返回一个二维数组的结果,这个二维数组的大小是的 int[n][n],题目给出了 n = 3 时的输出结果:

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

    那其实我们要做的就是将矩阵中的每一个单元格的内容填充进这个二维数组中,至于填充的过程是怎样的,就需要我们去找出规律,然后用代码去模拟这个旋转过程了,可见这是一道过程模拟的编程题。

    以 n == 4,有规律如下:

    不难发现,n = 4 的情况下,旋转了两圈。n = 3 的情况下,旋转了一圈,外加一个中心坐标。于是模拟顺时针矩阵的过程可以这样:

    • 填充上行从左到右
    • 填充右列从上到下
    • 填充下行从右到左
    • 填充左列从下到上

    由外向内一圈一圈这么画下去。

    这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

    那么我按照左闭右开的原则,来画一圈,大家看一下:

    Java 代码如下:

    1. class Solution {
    2. public int[][] generateMatrix(int n) {
    3. int[][] result = new int[n][n];
    4. int loop = n / 2; // 螺旋圈数
    5. int mid = n / 2; // 中心坐标,eg:n==3的中心坐标是[1,1]
    6. int num = 1; // 螺旋排序从1开始
    7. int startx = 0; // 起点x坐标
    8. int starty = 0; // 起点y坐标
    9. int offset = 1; // 偏移量
    10. int i, j; // 作为每次循环的起始坐标
    11. while(loop-- > 0) {
    12. // 模拟填充上行过程(左闭右开)
    13. for(j = starty; j < n - offset; j++) {
    14. result[startx][j] = num++;
    15. }
    16. // 模拟填充右列过程(上闭下开)
    17. for(i = startx; i < n - offset; i++) {
    18. result[i][j] = num++;
    19. }
    20. // 模拟填充下行过程(右闭左开)
    21. for(; j > starty; j--) {
    22. result[i][j] = num++;
    23. }
    24. // 模拟填充左列过程(下闭上开)
    25. for(; i > startx; i--) {
    26. result[i][j] = num++;
    27. }
    28. // 更新坐标
    29. startx++;
    30. starty++;
    31. // 更新偏移量
    32. offset += 1;
    33. }
    34. // 如果是奇数,中心坐标需要单独处理
    35. if(n % 2 == 1) {
    36. result[mid][mid] = num++;
    37. }
    38. return result;
    39. }
    40. }

  • 相关阅读:
    redis6.2(三)Redis事务操作、Redis持久化(RDB、AOF)
    QT 基于QScrollArea的界面嵌套移动
    一次单据图片处理的优化实践
    (高阶) Redis 7 第21讲 IO多路复用模型 完结篇
    centos 7 修改 limits.conf 导致 ssh 连接失败
    Vue项目实战之人力资源平台系统(四)路由模块
    【无标题】odoo16启动报错: ‘gbk‘ codec can‘t decode byte 0xae in position 430
    (附源码)php投票系统 毕业设计 121500
    “沉迷”学习,神奇的“峰终定律”
    计算机二级WPS 选择题(模拟和解析八)
  • 原文地址:https://blog.csdn.net/Your_Boy_Tt/article/details/138172273