美文网首页
螺旋矩阵又解

螺旋矩阵又解

作者: 锦绣拾年 | 来源:发表于2020-02-14 22:38 被阅读0次

螺旋矩阵是我一次面试的题
哈哈那时候还没有怎么刷过题,然后做题都是硬钢,技巧不成熟,现在看看那时候自己做的真是个憨憨。
https://www.jianshu.com/p/7bd679b60f88

不过思路还行,就是螺旋形遍历矩阵,又刷了lc54 写了个LeetCode版本的 内存消耗略大
不过emmm跑了评论里的几个题解,和我半斤八两嘛。

class Solution {
public:
    //while超好用
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        //一定会遍历n*n个数字
        //过去的我定了一个边界 怕碰壁
        vector<int> res;
        if(matrix.empty())
            return res;
        int m=matrix.size();
        int n=matrix[0].size();
        int biaoji[m][n];
        memset(biaoji,0,sizeof(biaoji));
        //横竖反横 反叔
        int count=m*n;
                    int x=0;
            int y=0;
        while(count>0){

            while(y<n&&biaoji[x][y]==0){
                res.push_back(matrix[x][y]);
                biaoji[x][y]=-1;
                y++;
            }
            y--;
            x++;
            while(x<m&&biaoji[x][y]==0){
                res.push_back(matrix[x][y]);
                biaoji[x][y]=-1;
                x++;
            }
            x--;
            y--;
            while(y>=0&&biaoji[x][y]==0){
                res.push_back(matrix[x][y]);
                biaoji[x][y]=-1;
                y--;
            }
            y++;
            x--;
            while(x>=0&&biaoji[x][y]==0){
                res.push_back(matrix[x][y]);
                biaoji[x][y]=-1;
                x--;
            }
            x++;
            y++;
            count--;
            
        }        
        return res;
        
    }
};

LC59
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :9.1 MB, 在所有 C++ 提交中击败了5.54%的用户

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        //我觉得vector<vector<int>>不如数组好用 明明。
       vector<vector<int>> res;
        if(n==0)
            return res;               
       for(int i=0;i<n;i++){
            vector<int> xx;
            for(int j=0;j<n;j++){
               xx.push_back(-1);
            }
            res.push_back(xx);
        }
        int count=1;
        int x=0;int y=0;
        while(count<=n*n){
          while(y<n&&res[x][y]==-1){
                // res.push_back(matrix[x][y]);
                res[x][y]=count++;
                y++;
            }
            y--;
            x++;
            while(x<n&&res[x][y]==-1){
                 res[x][y]=count++;
                x++;
            }
            x--;
            y--;
            while(y>=0&&res[x][y]==-1){
                 res[x][y]=count++;
                y--;
            }
            y++;
            x--;
            while(x>=0&&res[x][y]==-1){
                 res[x][y]=count++;
                x--;
            }
            x++;
            y++;
            // count++;
        }
        return res;
        
        
    }
};

记录两种题解:
第一种比较经典 精简

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>>res(n ,vector<int>(n,0));
        int l=0;
        int r=n-1;
        int u=0;
        int d=n-1;
        int begin=1;
        int end=n*n;
        while(begin<=end){
            for(int i=l;i<=r;i++)res[u][i]=begin++;
            u++;
            for(int i=u;i<=d;++i)res[i][r]=begin++;
            r--;
            for(int i=r;i>=l;--i)res[d][i]=begin++; 
            d--;
            for(int i=d;i>=u;--i)res[i][l]=begin++; 
            l++;
        }
        return res;
    }
};
vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix;
        for(int i = 0; i < n; ++i){
            vector<int> temp(n,0);
            matrix.push_back(temp);
        }
        int count = 1;
        for(int i = 0; i <= n/2; ++i){
            walkLayer(matrix,i,count);
        }
        return matrix;
    }
    
    void walkLayer(vector<vector<int>>& matrix, int layer, int& count){
        int n = matrix.size();
        if(layer == n-1-layer){
            matrix[layer][layer] = count;
            return;
        }
        for(int i = layer; i <= n-1-layer; ++i){
            matrix[layer][i] = count++;
        }
        for(int i = layer+1; i <= n-1-layer; ++i){
            matrix[i][n-1-layer] = count++;
        }
        for(int i = n-2-layer; i >= layer; --i){
            matrix[n-1-layer][i] = count++;
        }
        for(int i = n-2-layer; i > layer; --i){
            matrix[i][layer] = count++;
        }        
    }

相关文章

  • 螺旋矩阵又解

    螺旋矩阵是我一次面试的题哈哈那时候还没有怎么刷过题,然后做题都是硬钢,技巧不成熟,现在看看那时候自己做的真是个憨憨...

  • Python实现螺旋矩阵

    螺旋矩阵 什么是螺旋矩阵? 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大...

  • 螺旋矩阵

    螺旋矩阵 1.想法: 对于矩阵的螺旋我们可以规约为4个方向 2.代码:

  • 螺旋矩阵

    递归 非递归

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    题目描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。...

  • 螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1...

  • 螺旋矩阵

    原文地址,我的个人博 1.题目 2.分析 上图展示了一轮完整的顺时针螺旋遍历的过程,整个过程可以分为如图所示的四个...

  • 螺旋矩阵

    写在前面 2019年,年初到蚂蚁金服面试测试工程师的职位,现场有一道笔试题是求螺旋矩阵,当时大概和面试官说了一下思...

  • 螺旋矩阵

    题目信息 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 ...

网友评论

      本文标题:螺旋矩阵又解

      本文链接:https://www.haomeiwen.com/subject/dhjsfhtx.html