博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode】59. 螺旋矩阵 II
阅读量:5908 次
发布时间:2019-06-19

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

题目

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

输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]复制代码

题解

这个题目也比较简单, 和第54题类似: 这个题目很简单,上下左右分别用四个变量去标志:

上:top 下:bottom 左:left 右: right

就按照四步走就可以:

left -> right top -> bottom right -> left bottom -> top

python

class Solution:    def generateMatrix(self, n):        """        :type n: int        :rtype: List[List[int]]        """        matrix = [[0 for j in range(n)] for i in range(n)]        top = 0        bottom = n - 1        left = 0        right = n - 1        count = 1        while (True):            for i in range(left, right + 1):                matrix[top][i] = count                count += 1            top += 1            if left > right or top > bottom:                break            for i in range(top, bottom + 1):                matrix[i][right] = count                count += 1            right -= 1            if left > right or top > bottom:                break            for j in range(left, right + 1)[::-1]:                matrix[bottom][j] = count                count += 1            bottom -= 1            if left > right or top > bottom:                break            for i in range(top, bottom + 1)[::-1]:                matrix[i][left] = count                count += 1            left += 1            if left > right or top > bottom:                break        return matrix复制代码

java

class Solution {    public int[][] generateMatrix(int n) {         int[][] matrix = new int[n][n];        int top = 0;        int bottom = matrix.length - 1;        int left = 0;        int right = matrix[0].length - 1;        int count = 1;        while (true) {            for (int i = left; i <= right; i++) matrix[top][i] = count++;            top++;            if (left > right || top > bottom) break;            for (int i = top; i <= bottom; i++) matrix[i][right] = count++;            right--;            if (left > right || top > bottom) break;            for (int i = right; i >= left; i--) matrix[bottom][i] = count++;            bottom--;            if (left > right || top > bottom) break;            for (int i = bottom; i >= top; i--) matrix[i][left] = count++;            left++;            if (left > right || top > bottom) break;        }        return matrix;    }}复制代码

转载地址:http://umvpx.baihongyu.com/

你可能感兴趣的文章
结构体之间的转换
查看>>
asp.net发布webservice出现‘Could not write to output file ‘解决办法
查看>>
2018-2019-2 20165330《网络对抗技术》Exp5 MSF基础应用
查看>>
Web APP开发技巧总结
查看>>
转: 清理监听日志处理的方法 以及监听安装设定
查看>>
安装nginx
查看>>
多媒体开发之rtsp 实现rtsp over tcp/http/udp---rtsp发送
查看>>
ifram的高度自适应方法
查看>>
Shell 编程(函数)
查看>>
2222222
查看>>
二阶段冲刺第一天
查看>>
使用Xshell在Windows系统和Linux系统之间进行文件传输
查看>>
NDK 中C文件的函数头生成方法
查看>>
有序的双链表
查看>>
shell进程中的特殊状态变量
查看>>
一个非常好用的图片切割工具(c# winform开发)
查看>>
Spring注解@Resource和@Autowired区别对比
查看>>
Public Prize
查看>>
leetcode — combination-sum-ii
查看>>
Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)
查看>>