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 =
You should return the following matrix:
题意:给定n,得到n*n的环形数组
分类:数组
解法1:和leetcode--Spiral Matrix一样,只是访问过程变成赋值
解法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;
}
}
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;
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统