之前去美团面试,被问到如题目的算法问题,因为之前没有解决过类似的问题,所以当时没有答出来,今天在网上搜了一下,都是通过多次循环来实现的,觉得算法效率低,自己琢磨用递归实现一个,实现的思路是用递归,不断变化二维数组的行、列下标来实现螺旋,递增就很简单,有一个值一直++,然后给二维数组相应位置复制就可以了,此算法的难点在于行、列下标状态的变化与增减,不废话了,直接附代码:
public class ArrayAlgorithm {
public static void main(String[] args) {
int rowMax =10,columnMax=10;
int[][] array = new int[rowMax][columnMax];
//rowIncrease(or columnIncrease) 1:增,0不变,-1减
int increase=1,maxNum = rowMax*columnMax,rowIndex=0,columnIndex=0,rowIncrease=0,columnIncrease=1;
long start = System.currentTimeMillis();
fillNum(array,rowIndex,columnIndex,rowMax,columnMax,increase,maxNum,rowIncrease,columnIncrease);
System.out.println("use time:"+(System.currentTimeMillis()-start)+" ms");