问题描述:螺旋矩阵
思路:最开始我做题的想法不是这样的,我最开始用的是二维数组去赋值(两个for循环),因为输出螺旋矩阵,是个二维的,所以最开始想的就是用两个for循环,以至于思维受限,导致很久都没有相出解决方法来。就只让最外面的一层给按顺序给排序好了,其他的就不对了。应该的思维是一次一次的排序,而不是两个for循环的排序。具体方法请看代码即可理解清楚。首先,因为要进行的螺旋排序不止一圈,所以要在一个while循环中进行,循环判断的条件是方阵阶数的二分之一,如果是奇数,那最中心的那个数是需要单独赋值的,及最大值,如果是偶数直接排序即可。
思考如下几个问题:①在进行向左和向上时只能用++的方式?,可以怎么改?
②为什么我输出的结果是0开始的?如果改?改的方式?
解决:①不止可以以++的方式,还可以--的方式,在惯性思维里用的是--的方式,但是这里用--的方式的话,它的判断条件就不一样了,这里需要仔细考虑。
当减减时就是从最右边开始往左减减,一直减到第一个,也就是第0列的位置,判断停止,向上也是同样的判断,但是最后到达的地方的判断的条件不一致,这里需要思考一下(因为第0行已经有数了,所以不能取等号),减减的方式也附上了。
②输出是0开始是因为最开始的初始值为0,有两个方法可以解决此问题,第一个也是最简单的,就是把初始值赋值为1开始,第二个方法是num++变成++num,这个一般很少想得到,这里又涉及到了另一个知识点,可以复习一下。
强调:本题的关键还有一点是循环的判断条件,也就是没次for循环的终止点在哪,下一次的开始点是那,这要搞清楚,不然会重复和乱,坚持一种原则即可
例如:左闭右开,如下图(这点很关键,再次强调)