博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode59
阅读量:4546 次
发布时间:2019-06-08

本文共 2410 字,大约阅读时间需要 8 分钟。

题目:

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入:3

输出:

[ [1,2,3],

  [4,5,6],

  [7,8,9]

]

 

解题思路:

参见leetcode54

 

代码1:

class Solution {public:    vector
> generateMatrix(int n) { vector
v(n,0); vector
> res(n,v); vector
> res_flag(n,v); int i=0; int j=0; int have_left = 0; int have_right = 0; int have_up = 0; int have_down = 0; string cur_direction = "right"; for(int num=1;num<=n*n;num++){ res[i][j] = num; res_flag[i][j] = 1; if (j - 1 >= 0 && res_flag[i][j - 1] == 0) have_left = 1; if (j + 1 < n && res_flag[i][j + 1] == 0) have_right = 1; if (i - 1 >= 0 && res_flag[i - 1][j] == 0) have_up = 1; if (i + 1 < n && res_flag[i + 1][j] == 0) have_down = 1; cur_direction = nextDirection(cur_direction, have_left,have_right,have_up,have_down); if(cur_direction == "left") j--; if(cur_direction == "right") j++; if(cur_direction == "up") i--; if(cur_direction == "down") i++; have_left = 0; have_right = 0; have_up = 0; have_down = 0; } return res; } string nextDirection(string cur_direction,int have_left,int have_right,int have_up,int have_down){ if(cur_direction == "left" && have_left == 1) return "left"; if(cur_direction == "right" && have_right == 1) return "right"; if(cur_direction == "up" && have_up == 1) return "up"; if(cur_direction == "down" && have_down == 1) return "down"; if(have_left == 1) return "left"; if(have_right == 1) return "right"; if(have_up == 1) return "up"; if(have_down == 1) return "down"; return "nonext"; }};

 

代码2:

class Solution {public:    vector
> generateMatrix(int n) { vector
> res(n, vector
(n, 0)); int up = 0, down = n - 1, left = 0, right = n - 1, val = 1; while (true) { for (int j = left; j <= right; ++j) res[up][j] = val++; if (++up > down) break; for (int i = up; i <= down; ++i) res[i][right] = val++; if (--right < left) break; for (int j = right; j >= left; --j) res[down][j] = val++; if (--down < up) break; for (int i = down; i >= up; --i) res[i][left] = val++; if (++left > right) break; } return res; }};

 

 

 

 

转载于:https://www.cnblogs.com/yxlsblog/p/10366878.html

你可能感兴趣的文章
一种实现C++反射功能的想法(一)
查看>>
lvs+keepalived+nginx高性能负载均衡集群
查看>>
XXL-Job高可用集群搭建
查看>>
JDBC
查看>>
CodeForces - 123E Maze
查看>>
ZOJ 1709 Oil Deposits(dfs,连通块个数)
查看>>
安卓开源项目周报0308
查看>>
记可敬可佩的老车同志
查看>>
Maven in 5 Minutes(Windows)
查看>>
常用前端开发工具合集
查看>>
T-SQL:SQL Server-数据开发(经典)
查看>>
IOS 截取字符串
查看>>
键盘控制div移动并且解决停顿问题(原生js)
查看>>
矩阵快速幂优化线性递推
查看>>
基础网络流学习笔记
查看>>
Linux文件夹文件创建、删除
查看>>
归并排序 稳定
查看>>
xml约束技术之dtd
查看>>
项目Beta冲刺(团队3/7)
查看>>
PHP和MySQL应用实战(更新完毕)
查看>>