注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HT·生活

123

 
 
 

日志

 
 

ex59 Spiral Matrix II  

2015-05-16 21:40:58|  分类: leetcode |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
和ex54几乎一样,还简单一些。

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]
直接把ex54代码改一下就可以了,没有难度。

int** generateMatrix(int n) {
if (n <= 0)
return NULL;
int i, j, k, p;

int len;
if (n % 2 == 0) //确定有多少层循环
{
len = (n) / 2;
}
else
{
len = (n) / 2;
len++;
}

int index = 1; //从1开始

int **matrix = (int**)malloc(n*sizeof(int*));
for (i = 0; i < n; i++)
{
matrix[i] = (int*)malloc(n*sizeof(int));
}

int start, end;
for (k = 0; k <len; k++)
{
i = k;
//第一个坐标是(i,i)
start = i;
end = n - 1 - i;
for (j = i; j < n - 1 - i; j++)
{
matrix[i][j] = index;
index++;
}
if (index >= n*n)
{
//如果是奇数话,读到这里就结束了
matrix[i][n - 1 - i] = index;
index++;
break;
}

//第二个坐标是(i,n-1-i)

start = i;
end = n - 1 - i;
j = n - 1 - i;
for (p = i; p < n - 1 - i; p++)
{
matrix[p][j] = index;
index++;
}

//第三个坐标是(n-1-i,n-1-i)
start = n - 1 - i;
end = i;
p =n - 1 - i;
for (j = n - 1 - i; j > i; j--)
{
matrix[p][j] = index;
index++;
}
//第四个坐标是(n-1-i,i)
start = n - 1 - i;
end = i;
j = i;
for (p = n - 1 - i; p > i; p--)
{
matrix[p][j] = index;
index++;
}
if (index > n*n)
break;
}
//printf("total number is ================%d \n", index);
return matrix;
}

update java version with neat code 2015/12/4

public class SpiralMatrixII {
public int[][] generateMatrix(int n) {
return helper(n);
}
private int[][] helper(int num) {
int[][] matrix = new int[num][num];
if (num == 0) {
return matrix;
}
int[] nx = {0, 1, 0, -1};
int[] ny = {1, 0, -1, 0};
int x = 0, y = -1; // 因为是从(0, 0) 开始的
int m = matrix.length, n = matrix[0].length;
int i = 0, k = 0, index = 1;
while (m > 0 && n > 0) {
if (i % 2 == 0) {
k = n; // 走的行
m--; // 少了一行
} else {
k = m; // 走的列
n--; // 少了一列
}
while (k > 0) {
x += nx[i];
y += ny[i];
matrix[x][y] = index;
index++;
k--;
}
i++;

i %= 4;
}
return matrix;
}
}


  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017