问题描述:螺旋矩阵

#include <stdio.h>
#include <memory.h>
int main(){int n;scanf("%d",&n);int i, c = 0, r = 0,num = 0,cnt = n/2;int a[n][n];while (cnt--){for (i = r; i<n-c; i++)    //→a[r][i] = num++;r++;for (i = r; i<n-c; i++)    //↓a[i][n-c-1] = num++;c++;for (i = c-1; i<n-c; i++)    //←a[n-r][n-i-2] = num++;
//  for (i = n - c; i >= r - 1; i--)    //←
//      a[n-r][i] = ++num;//减减方法
//  for (i = n - c - 1; i > r-1; i--)        //↑
//      a[i][c-1] = num++;for (i = r; i<n-r; i++)        //↑a[n-1-i][c-1] = num++;
}   if(n%2 != 0)            //如果是奇数,填上正中间那个数a[n/2][n/2] = num++;for (int i =0; i<n; i++){  //遍历输出for (int j =0; j<n; j++)printf("%3d",a[i][j]);printf("\n");}
return 0;
}

思路:最开始我做题的想法不是这样的,我最开始用的是二维数组去赋值(两个for循环),因为输出螺旋矩阵,是个二维的,所以最开始想的就是用两个for循环,以至于思维受限,导致很久都没有相出解决方法来。就只让最外面的一层给按顺序给排序好了,其他的就不对了。应该的思维是一次一次的排序,而不是两个for循环的排序。具体方法请看代码即可理解清楚。首先,因为要进行的螺旋排序不止一圈,所以要在一个while循环中进行,循环判断的条件是方阵阶数的二分之一,如果是奇数,那最中心的那个数是需要单独赋值的,及最大值,如果是偶数直接排序即可。

思考如下几个问题:①在进行向左和向上时只能用++的方式?,可以怎么改?

②为什么我输出的结果是0开始的?如果改?改的方式?

解决:①不止可以以++的方式,还可以--的方式,在惯性思维里用的是--的方式,但是这里用--的方式的话,它的判断条件就不一样了,这里需要仔细考虑。

当减减时就是从最右边开始往左减减,一直减到第一个,也就是第0列的位置,判断停止,向上也是同样的判断,但是最后到达的地方的判断的条件不一致,这里需要思考一下(因为第0行已经有数了,所以不能取等号),减减的方式也附上了。

②输出是0开始是因为最开始的初始值为0,有两个方法可以解决此问题,第一个也是最简单的,就是把初始值赋值为1开始,第二个方法是num++变成++num,这个一般很少想得到,这里又涉及到了另一个知识点,可以复习一下。

关于++i和i++的区别,可参考以下博主:https://blog.csdn.net/Cs_ChenSh/article/details/79955638

强调:本题的关键还有一点是循环的判断条件,也就是没次for循环的终止点在哪,下一次的开始点是那,这要搞清楚,不然会重复和乱,坚持一种原则即可

例如:左闭右开,如下图(这点很关键,再次强调)

螺旋方阵(Leetcode第59题)相关推荐

  1. 【LeetCode第59题】长舒一口气,终于学会了这苦涩难懂的 螺旋矩阵II

  2. Leetcode 题解-59题

    题目: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 输入:n = 3 输出:[[1,2,3],[8,9,4],[ ...

  3. LeetCode部分刷题笔记!!!JavaScript!!!

    详细解说请看视频JS老毕:人人都能看得懂的Leetcode力扣刷题教程合集 边看视频边记录笔记!!!部分题目在视频中无! 文章目录 LeetCode第1题:1. 两数之和 LeetCode第2题:2. ...

  4. 刷题汇总(一)leetcode 精选50题 JavaScript答案总结

    题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...

  5. 【算法】螺旋方阵 上交OJ1021

    输入格式: 输入在一行中给出一个正整数N(<10). 输出格式: 输出N×N的螺旋方阵.每行N个数字,每个数字占3位. 输入样例: 5 1 2 3 4 516 17 18 19 615 24 2 ...

  6. Leetcode重点250题

    LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...

  7. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  8. c++顺时针螺旋方阵

    题目:建立一个程序,输入整数N,生成并输出N行N列的顺时针螺旋方阵,如下图所示: 解答:这个题目属于编程类经常出现的二维数组基础题,本人作为初学者,自己做出了一套可能有点复杂的解法,欢迎大家讨论交流. ...

  9. 刷题汇总(三)leetcode 精选50题 C++答案总结

    题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...

最新文章

  1. 击中-击不中变换(约束)—lhMorpHMTC
  2. row_number() over()排序功能说明
  3. 单片机c语言不能编译,用keil4编译C语言代码,编译通过,但是链接时无法产生.hex文件。...
  4. Android Stduio 发生 Process ‘command ‘somePath:java.exe‘‘ finished with non-zero exit value 2 异常的解决办法
  5. (转)任正非圣诞文章:千古兴亡多少事,一江春水向东流,为轮值CEO鸣锣开道...
  6. jquery中Uncaught TypeError: $(...).ajaxUpload is not a function(…)错误解决方法
  7. 服务器系统备份还原到虚拟机,一秒还原,一秒备份,系统重装「新手学识4」虚拟机--时光倒流...
  8. PCL 实现 ICP 算法原理源码解析
  9. 云计算的特征:基本功能
  10. linux ftp pure,linux下安装FTP(pure-ftpd)
  11. 倪海厦天纪笔记16_倪海厦《天纪》——人间道听课笔记
  12. 删除数组中的指定元素——C++实现
  13. Mac工具:Karabiner,解决mac上无法使用的情况
  14. 图表绘制与处理的常用软件
  15. 点击链接新窗口打开页面
  16. zblogphp 广告联盟_天兴工作室:广告位大全插件(网站各种广告位集合效果)
  17. ccf 地铁修建spfa (得分85到100)
  18. 电动汽车简化设计,“减重瘦身”不再难
  19. 复旦大学计算机专硕学制几年,复旦大学硕士研究生学制是几年
  20. 第一篇博客——C语言实现简单的学生成绩管理系统

热门文章

  1. kafka 主动消费_Kafka核心API——Consumer消费者
  2. Python-类与文件读取结合
  3. /usr/bin/python^M: 解释器错误: 没有那个文件或目录
  4. BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
  5. 月赛 SX_ACM 惨痛教训
  6. Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
  7. 20145326蔡馨熠《信息安全系统设计》第2周学习总结
  8. OA,ERP等源码一部分演示
  9. MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法...
  10. ramdisk根文件系统+initramfs