您的位置:首页 > 理论基础 > 数据结构算法

leetcode--Spiral Matrix II

2015-06-07 17:13 489 查看
Given an integer n, generate a square matrix filled with elements from 1 ton2 in spiral order.

For example,

Given n =
3
,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

题意:给定n,得到n*n的环形数组

分类:数组

解法1:和leetcode--Spiral Matrix一样,只是访问过程变成赋值

public class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int

;
int count = 1;
int rows = n;
if(rows==0) return res;
int cols = n;
boolean vis[][] = new boolean[rows][cols];
int x = 0;
while(x*2<cols && x*2<rows){
int endX = rows-x-1;
int endY = cols-x-1;
for(int i=x;i<=endY;i++){
if(!vis[x][i]){
res[x][i]=count++;
vis[x][i] = true;
}
}
for(int i=x+1;i<=endX;i++){
if(!vis[i][endY]){
res[i][endY]=count++;
vis[i][endY] = true;
}
}
for(int i=endY-1;i>=x;i--){
if(!vis[endX][i]){
res[endX][i]=count++;
vis[endX][i] = true;
}
}
for(int i=endX-1;i>x;i--){
if(!vis[i][x]){
res[i][x]=count++;
vis[i][x] = true;
}
}
x = x + 1;
}
return res;
}
}

解法2:优化了遍历过程

public class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int

;
if(n==0) return res;
int x = 0,y = 0;
int count = 0,limit = n*n;
int right = n-1,bottom = n-1,left = 0,top = 0;
while(count<limit){
while(count<limit&&y<=right){res[x][y++]=++count;}
y--;x++;top++;
while (count<limit&&x<=bottom) {res[x++][y]=++count;}
x--;y--;right--;
while(count<limit&&y>=left) {res[x][y--]=++count;}
x--;y++;bottom--;
while(count<limit&&x>=top) {res[x--][y]=++count;}
x++;y++;left++;
}
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息