这道题跟Spiral Matrix很类似,只是这道题是直接给出1到n^2,然后把这些数按照螺旋顺序放入数组中。思路跟Spiral Matrix还是一样的,就是分层,然后按照上右下左的顺序放入数组中。每个元素只访问一次,时间复杂度是O(n^2)。代码如下:
public int[][] generateMatrix(int n) { if(n<0) return null; int[][] res = new int[n][n]; int levelNum = n/2; int num = 1; for(int l=0;l<levelNum;l++) { for(int i=l;i<n-l;i++) { res[l][i] = num++; } for(int i=l+1;i<n-l;i++) { res[i][n-1-l] = num++; } for(int i=n-2-l;i>=l;i--) { res[n-1-l][i] = num++; } for(int i=n-2-l;i>l;i--) { res[i][l] = num++; } } if(n%2==1) { res[levelNum][levelNum] = num; } return res; }这种题目就是简单的数组操作,主要是得细心,注意数组下标即可。
没有评论:
发表评论