所以我认为我在这方面投入了太多时间,但这是一个有趣的挑战,所以我想让我们尝试一下.
我向该解决方案推荐了一个代码版本,尽管它可能不是最干净的,因为我向后处理整个问题,但它的效果很好.
这是我可以在线尝试的解决方案(请注意,它没有经过严格优化,并且绝不是好的Java代码.老实说,这是一种快速而肮脏的实现):
因此,想法很简单:我们首先为矩阵中的每个位置计算正确的值,然后将其打印出来.
让我们再详细一点:
我们首先为要打印的值创建矩阵:
给定大小n,这是
int[][] values = new int[n][n];
现在我们要计算每个点的正确值.我选择以“错误的方式”解决问题,而不是从第一点开始,而是从螺旋的中心开始.
基本上想象一下n = 3的矩阵:
[1][2][3]
[8][9][4]
[7][6][5]
而不是从1开始,我只是从9开始.这样做的原因是,实际上计算从一个点螺旋成一个点到螺旋成一个点的位置实际上更容易.
因此,从这个中心点开始,我们以圆形的方式从那里螺旋上升.对于矩阵
[1][2]
[4][3]
这意味着我们访问4-> 3-> 2-> 1.然后将正确的值保存在矩阵中.
我的方法唯一的问题是,对于尺寸不均匀(3、5、7等)的矩阵,我仍然以螺旋顺序访问点,对于3×3,访问顺序例如9-> 4-> 3-> 2-> 1-> 8-> 7-> 6->如图5所示,我完全画在Paint中:
这导致结果矩阵如下:
[5][6][7]
[4][9][8]
[3][2][1]
尽管可以简单地解决此小问题,但是只要将矩阵n%2!= 0再次反转打印一次即可.
希望我可以提供其他解决方法的帮助.