首页 > 其他分享 >LeetCode | 59 SpiralMatrixII

LeetCode | 59 SpiralMatrixII

时间:2024-08-01 23:19:30浏览次数:15  
标签:count startX 59 moveY int moveX ++ SpiralMatrixII LeetCode

主类

https://github.com/dolphinmind/datastructure/tree/datastructure-array-02

循环不变量原则, 保证问题边界的逻辑一致性(从二分法的启发)

  • 初始位置
  • 旋转圈数 奇偶性
  • 四条边的边界逻辑
  • offset
package com.github.dolphinmind.array;

/**
 * @author dolphinmind
 * @ClassName SpiralMatrixII
 * @description 59 . 螺旋矩阵 II
 * @date 2024/8/1
 */

public class SpiralMatrixII {
    public int[][] generateMatrix(int n) {

        if (n == 0) {
            return null;
        }

        int[][] nums = new int[n][n];

        int loop = 1;

        int startX = 0;
        int startY = 0;

        int moveX  = 0;
        int moveY  = 0;

        int offset = 1;
        int count  = 1;

        while (loop <= n/2) {
            System.out.println("上边");
            while (moveY < n - offset) {
                printPoint(moveX, moveY, count);
                nums[moveX][moveY] = count++;
                moveY++;
            }
            System.out.println("右边");
            while (moveX < n - offset) {
                printPoint(moveX, moveY, count);

                nums[moveX][moveY] = count++;
                moveX++;
            }

            System.out.println("下边");
            while (moveY > startY) {
                printPoint(moveX, moveY, count);

                nums[moveX][moveY] = count++;
                moveY--;
            }

            System.out.println("左边");
            while (moveX > startX) {
                printPoint(moveX, moveY, count);

                nums[moveX][moveY] = count++;
                moveX--;
            }

            startX++;
            startY++;
            loop++;
            offset++;

            moveX = startX;
            moveY = startY;
        }

        if ( n % 2 == 1) {
            System.out.println("中心");
            printPoint(startX, startY, count);
            nums[startX][startY] = count;
        }

        return nums;
    }

    public void printPoint(int x, int y, int count) {
        System.out.println("[" + x + "," + y + "] = " + count);
    }
}

测试类

package com.github.dolphinmind.array;

import org.junit.Test;

/**
 * @author dolphinmind
 * @ClassName SpiralMatrixIITest
 * @description
 * @date 2024/8/1
 */

public class SpiralMatrixIITest {

    @Test
    public void generateMatrix() {
        int[][] matrix = new SpiralMatrixII().generateMatrix(4);

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }

}

标签:count,startX,59,moveY,int,moveX,++,SpiralMatrixII,LeetCode
From: https://www.cnblogs.com/dolphinmind/p/18337771

相关文章

  • [Leetcode]SQL语句
    groupby182.查找重复的电子邮箱SQLSchemaPandasSchema表:Person+-------------+---------+|ColumnName|Type|+-------------+---------+|id|int||email|varchar|+-------------+---------+id是该表的主键(具有唯一值的列)。此......
  • JSP学生宿舍管理系统599o3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表用户功能:宿管,学生,班级,宿舍楼宇,宿舍分配,来访登记开题报告内容JSP学生宿舍管理系统开题报告一、选题背景与意义1.选题背景随着我国经济的飞速发展和科学技术的全面进步,以计算机技术、通信技术和数据库技术为基础的信息系统正处于蓬勃发展的黄金时......
  • 二叉搜索树,Map,Set,LeetCode刷题
    二叉搜索树,Map,Set1.二叉搜索树2.二叉搜索树的模拟实现1.1插入操作1.2查找操作1.3删除操作3.二叉搜索树时间复杂度分析4.TreeMap和TreeSet5.Map5.1Map的常用方法5.2Map.Entry<K,V>6.Set6.1Set的常用方法LeetCode刷题1.二叉搜索树与双向链表1.二叉搜......
  • LeetCode | 209 MinimumSizeSubarraySum
    分析本题中是找与target相符的最小连续的子数组和,找一个能够容纳target这么大的最小子区间。虽然本节引入了滑动窗口的概念,可我更偏好于,这是一只毛毛虫在数组上的移动,找到最小的容纳自己位置的地方target可看作毛虫本身的重量,数组中的每个元素值表示可承受的重量,right右指针看......
  • LeetCode 322 零钱兑换
    题目描述给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。思路这是一个完全背包问题,背包问题当满足:物品不......
  • 每日一题:Leetcode-48 旋转图像
    力扣题目解题思路java代码力扣题目:给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6]......
  • 题解:CF559B Equivalent Strings
    CF559BEquivalentStrings题解题目描述吐槽一下,题目翻译有歧义。思路分析你会发现,当你需要判断字符串\(a,b\)是否等价时,如果长度为偶数,需要继续判断字符串\(a\)拆分的字串。所用知识s.substr(i,j)//在字符串s中,从位置i开始截取长度为j的字串参考代码#include<bits......
  • LeetCode 2024/8 每日一题合集
    2024-7-1LCP40.心算挑战代码实现classSolution{public:intmaxmiumScore(vector<int>&cards,intcnt){intn=size(cards);std::sort(cards.rbegin(),cards.rend());intsum=std::accumulate(cards.begin(),cards.begin()......
  • 两数之和(LeetCode题)
    题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=......
  • LeetCode 3111. 覆盖所有点的最少矩形数目(贪心、排序)
    题目:3111.覆盖所有点的最少矩形数目思路:只需关注横坐标,对横坐标进行升序排序,然后进行贪心,求得最少的矩阵数量classSolution{public:intminRectanglesToCoverPoints(vector<vector<int>>&points,intw){vector<int>v;for(inti=0;i<poi......