leetcode59刷题打卡

简介: leetcode59刷题打卡
leetcode59 螺旋矩阵二解题思路

题目描述

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 20

解题思路:

可以将其看做是n阶方阵,利用四个for循环进行上下左右的遍历且每次遍历需要按照相同规则

例如向右遍历的时候不遍历整行,将最后一个元素作为向下遍历的开始元素

根据这规则我写出如下代码:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
      vector<vector<int>> result(n, vector<int>(n, 0));
      int loop = n / 2; //完整遍历的圈数
      int i, j; //横纵坐标 只是符号
      int num = 1; //将存入容器中的数据
      if (n % 2 != 0)  result[loop][loop] = n * n;  //判断是否矩阵有中间数  如果有则直接填入
      for (int cur_loop = 0; cur_loop < loop; cur_loop++) {  //cur_loop代表当前处于的圈数
        for (j = cur_loop; j < n - cur_loop - 1; j++) {  //向右  每圈存入时横坐标保持不变  纵坐标持续增加
          result[cur_loop][j] = num++;
        }
        for (i = cur_loop; i < n - cur_loop - 1; i++) {  //向下  每圈存入时纵坐标保持不变  横坐标持续增加
          result[i][n - cur_loop - 1] = num++;
        }
        for (j = n - cur_loop - 1; j > cur_loop; j--) {  //向左  每圈存入时横坐标保持不变  纵坐标持续递减
          result[n - cur_loop - 1][j] = num++;
        }
        for (i = n - cur_loop - 1; i > cur_loop; i--) {  //向上  每圈存入时纵坐标保持不变  横坐标持续递减
          result[i][cur_loop] = num++;
        }
      }
      return result;
    }     
};


相关文章
|
28天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
50 6
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
43 4
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
99 2
|
28天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
2月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
47 7
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
22 4
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
48 5
|
2月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
45 3
|
2月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
21 3