LeetCode:蛇形矩阵II(spiral matrix II)
2016-04-04 20:33
375 查看
题目:
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. 判断特殊情况,n=0或1
2. 定义左右上下边界,依次填充数组;动态更新边界,继续填充,直到左右边界重合或上下边界重合。
3. 注意每次填充的前提是num小于n*n
代码(Python):时间 O(n), 空间 O(n)
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 ] ]
思路:
1. 判断特殊情况,n=0或1
2. 定义左右上下边界,依次填充数组;动态更新边界,继续填充,直到左右边界重合或上下边界重合。
3. 注意每次填充的前提是num小于n*n
代码(Python):时间 O(n), 空间 O(n)
class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ if n == 0: return [] if n == 1: return [[1]] arr = [[0]*n for i in range(n)] row_begin = 0; row_end = n-1; col_begin = 0; col_end = n-1 num = 1; final = n*n while num <= final: if num <= final and col_begin < col_end: for i in range(col_begin, col_end+1): arr[row_begin][i] = num num += 1 row_begin += 1 if num <= final and row_begin < row_end: for i in range(row_begin, row_end+1): arr[i][col_end] = num num += 1 col_end -= 1 if num <= final and col_begin < col_end: for i in range(col_end, col_begin-1,-1): arr[row_end][i] = num num += 1 row_end -= 1 if num <= final and row_begin < row_end: for i in range(row_end, row_begin-1,-1): arr[i][col_begin] = num num += 1 col_begin += 1 return arr简化后的代码:只用两个变量作为边界判断条件。
class Solution(object): def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ if n == 0: return [] arr = [[0]*n for i in range(n)] start = 0; end = n-1; num = 1; final = n*n while start < end: for j in range(start, end+1): arr[start][j] = num num += 1 for i in range(start+1, end+1): arr[i][end] = num num += 1 for j in range(end-1, start-1,-1): arr[end][j] = num num += 1 for i in range(end-1, start,-1): arr[i][start] = num num += 1 start += 1 end -= 1 if start == end: arr[start][end]=final return arr
相关文章推荐
- HDU 1686 Oulipo
- c++细节总结链接
- linux命令--telnet
- 粥可赛艇——重庆大学月赛
- 复利计算--结对
- NPOI2.0学习(一)
- java构造方法
- 毕业工作五年的总结和感悟(上)
- setDrawingCacheEnabled(boolean flag)的用法
- 【day0404】C++ 内联函数inline
- ubuntu14.04启动提示set_sw_state failed
- pdo 的配置与启用
- storm.yaml 配置项
- C++虚函数、虚函数的作用和使用方法
- 016 3Sum Closest
- MapReduce: WordCount的Eclipse实现
- SVG图标在移动端的应用
- 设计模式C++桥接模式
- C++ 自定义比较:仿函数、函数与重载操作符
- mysql Install/Remove of the Service Denied!错误的解决办法