zoukankan      html  css  js  c++  java
  • 面试随缘做题---day1

    leetcode no.54 螺旋矩阵(数组)

    顺时针访问数组,到边界(超出矩阵大小或遇到已访问折回去),转方向需要注意操作。

    • 转方向条件:横竖越界或者碰到vis=1 退出条件:访问完m*n个元素
    • 每次刚进来让temp=start,里层循环一条线一个方向,每次试探之前让start=temp(即上一轮移动结果),当前start点设置为已访问,然后产生新的temp,最后temp违规,更新方向,之后修改start(此处如果不修改,哪那么下一次进来还是vis=1的start)。进入下一轮大循环。
    • 有大于0的判断,且必须在判断vis数组为0之前,不然访问负下标直接报错
    • 记得更新color的值

    注意为空的时候没有横向长度,metric[0].size是不合法的。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            vector<int>ans;
            int len1=matrix.size();
            if(len1==0) return ans;
            int len2=matrix[0].size();
            int x[4]={0,1,0,-1};
            int y[4]={1,0,-1,0};
            int startx=0;
            int starty=0;
            int tempx=startx;
            int tempy=starty;
            int color=0;
            int vis[100][100]={0};
            int i=0;
            while(color<len1*len2)
            {
                tempx=startx;
                tempy=starty;
                //printf("(%d,%d)",startx,starty);
                while(tempx<len1 && tempy<len2 && tempx>=0 && tempy>=0 && vis[tempx][tempy]==0 )
                {
                    startx=tempx;
                    starty=tempy;
                    vis[tempx][tempy]=1;
                    //printf("%d",matrix[startx][starty]);
                    color++;
                    ans.push_back(matrix[startx][starty]);
                    tempx+=x[i];
                    tempy+=y[i];
                }
                i++;
                i=i%4;
                startx+=x[i];
                starty+=y[i];
            }
            return ans;
        }
    };
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    关于《浪潮之巅》
    C++知识点
    #ifndef/#define/#endif以及#if defined/#else/#endif使用详解
    typedef void(*Fun)(void);
    C#-StructLayoutAttribute(结构体布局)
    Web Services
    C# DataGridView
    VS2017编译boost库
    位与字节
    c++ map
  • 原文地址:https://www.cnblogs.com/tingxilin/p/13342111.html
Copyright © 2011-2022 走看看