zoukankan      html  css  js  c++  java
  • leetcode Spiral Matrix II

    题目:是Spiral Matrix相关的的。这题的意思是给定一个n,那么在n*n的矩阵里按照循环记录将1,2,3,..., n*n。如下如果给定3,那么:

    [
     [ 1, 2, 3 ],
     [ 8, 9, 4 ],
     [ 7, 6, 5 ]
    ]
    一开始我想是不是有数学公式直接下标对应的,那直接遍历输出就可以了。但是推了一会,没有什么好的头绪。于是就分情况讨论了,和Spiral Matrix一样的分情况,只是这里的分情况是记录在数组里面。
    利用上,下,左,右,分别记录每次循环可以到达的四个边界,我们每次就输出一环,走完一环往内走。
    需要注意的:
    1.要用下标访问vector<vector> >需要先声明大小才可以使用下标访问。
    2.每走完一环,相应更新四个方向。
    3.如果是奇数,那么n*n这个数需要另外存。也就是存在[n/2][n/2]的位置。
    class Solution {
    public:
    vector<vector<int> > generateMatrix(int n)
    {
        vector<int> sub(n);
        vector<vector<int> > ans(n, sub); // 也可以用vector<vector<int> > ans(n, vector<int>(n));
        if (n < 1) return ans;
        int val = 1, left = 0, right = n-1, up = 1, down = n-1;
        for (int i = 0; i < n/2; i++)
        {
            for (int j = left; j <= right; j++)
            {
                ans[i][j] = val++;
            }
            for (int j = up; j <= down; j++)
            {
                ans[j][right] = val++;
            }
            for (int j = right - 1; j>=left; j--)
            {
                ans[down][j] = val++;
            }
            for (int j = down - 1; j >= up; j--)
            {
                ans[j][left] = val++;
            }
            left++; right--; up++; down--;
        }
        if (n%2)
            ans[n/2][n/2] = n*n;
        return ans;
    }
    };

     2015/03/29:

    一环一环往里填,需要注意的是每次环的起始,例如 1 2 3 填入了  那么最右边填的就是 4 和 5 最下边填的就是 6 和 7 然后 从左下到左上的时候是要填 8,所以用left right up down控制好即可,Python代码如下:

    class Solution:
        # @return a list of lists of integer
        def generateMatrix(self, n):
            mylist = [[0]*n for i in range(n)]
            num = 1
            left, right, up, down = 0, n-1, 0, n-1
            while num <= n**2:
                for i in range(left, right+1):
                    mylist[up][i] = num
                    num += 1
                for i in range(up+1, down+1):
                    mylist[i][right] = num
                    num += 1
                for i in range(left, right)[::-1]:
                    mylist[down][i] = num
                    num += 1
                for i in range(up+1, down)[::-1]:
                    mylist[i][left] = num
                    num += 1
                left += 1
                right -= 1
                up += 1
                down -= 1
            return mylist
                
  • 相关阅读:
    beego学习笔记(4):开发文档阅读(1)
    go的匿名组合
    beego学习笔记(3)
    beego学习笔记(2)
    python发送post请求发送json数据时,报415的原因和处理方法。
    Kali Linux的安装
    linux下配置mysql的远程访问
    selenium学习笔记
    Fiddler使用方法简介
    使用webdriver打开本地浏览器--python版
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4077509.html
Copyright © 2011-2022 走看看